目前為止,我並沒有找到C++中數學意義上的取模操作。%是一種取余運算。
假設r = a mod b
,關於取模與取余的一點概念有:
-
公式都是:
c = a / b
,r = a - c * b
-
對於
a / b >= 0
的結果,取模和取余等價 -
如果
a / b < 0
,那么對於取模,c向負無窮舍入;對於取余,c向0舍入
那么,C++中什么時候會用到取模?
在類型轉換時,當把一個超出范圍的值v賦給一個無符號類型時,其計算方法是:
-
先確定無符號類型的可取數n
-
最終結果 = v mod n
比如,把-1賦值給unsigned char時,計算公式是:-1 mod 256
,結果是255。
而如果把-1賦值給unsigned int時,結果則是4294967295。今天出了一個bug,原因就是錯誤地把負數強制轉換成了unsigned int,本應該轉換成unsigned char,但二者的結果大不相同。