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,但二者的结果大不相同。

原文地址:https://www.cnblogs.com/demon90s/p/6536550.html