C++中的取余与取模


目前为止,我并没有找到C++中数学意义上的取模操作。%是一种取余运算。

假设r = a mod b,关于取模与取余的一点概念有:

  • 公式都是:c = a / br = a - c * b

  • 对于a / b >= 0的结果,取模和取余等价

  • 如果a / b < 0,那么对于取模,c向负无穷舍入;对于取余,c向0舍入

那么,C++中什么时候会用到取模?

在类型转换时,当把一个超出范围的值v赋给一个无符号类型时,其计算方法是:

  1. 先确定无符号类型的可取数n

  2. 最终结果 = v mod n

比如,把-1赋值给unsigned char时,计算公式是:-1 mod 256,结果是255。

而如果把-1赋值给unsigned int时,结果则是4294967295。今天出了一个bug,原因就是错误地把负数强制转换成了unsigned int,本应该转换成unsigned char,但二者的结果大不相同。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM