C++中取餘運算的實現

一、C++中的整數除法

C++中整數除法和取餘用的是truncate除法(舍0取整),而給無符號類型賦值超出表示范圍時候用無符號類型等於賦值對無符號類型可以表示的數值總數取餘,智力的取餘是基於floor除法的(向下取整)。
在整數除法中,Java/C 等語言用的是 truncate 除法,Python 用的是 floor 除法。

1、truncate 除法

向零取整。向 0 方向取最接近精確值的整數,換言之就是舍去小數部分,因此又稱截斷取整(Truncate)。可以這樣理解,先用浮點數除法進行計算,計算結果直接舍去小數部分。
如:

5/-2=-2.5,所以整數除法中5/(-2)=-2
-5/2=-2.5,所以整數除法中-5/2=-2
-5/-2=2.5,所以整數除法中-5/-2=2
5/2=2.5,所以整數除法中5/2=0

2、C++中取餘

有上述除法,我們已知a/b=c,而取餘操作時a%b=d
那麼d的求解方法如下:

d=a-(bc)
5%2=5-(22)=1
(-5)%(-2)=(-5)-((-2)2)=-1
5%(-2)=5-((-2)(-2))=1
(-5)%2=(-5)-(2*(-2))=-1

最後兩個式子尤其值得註意

3、floor 除法

理解起來就是向下取整

5/-2=-2.5,所以floor除法中5/(-2)=-3
-5/2=-2.5,所以floor除法中-5/2=-3
-5/-2=2.5,所以floor除法中-5/-2=2
5/2=2.5,所以floor除法中5/2=2

4、C++中無符號變量被賦值超出他表示范圍的情況

如我們給定unsigned char a;取值范圍為0-255共256個數值,則

a = 5 輸出為5 理解為 5-0256
a=257 輸出為1 理解為 257-1256
a=-5 輸出為251 理解為-5 – (-1256)
a=-257 輸出為255 理解為 -257 – (-2256)

到此這篇關於C++中取餘運算的實現的文章就介紹到這瞭,更多相關C++ 取餘運算內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: