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