C++中取余運(yùn)算的實(shí)現(xiàn)
一、C++中的整數(shù)除法
C++中整數(shù)除法和取余用的是truncate除法(舍0取整),而給無符號類型賦值超出表示范圍時候用無符號類型等于賦值對無符號類型可以表示的數(shù)值總數(shù)取余,智力的取余是基于floor除法的(向下取整)。
在整數(shù)除法中,Java/C 等語言用的是 truncate 除法,Python 用的是 floor 除法。
1、truncate 除法
向零取整。向 0 方向取最接近精確值的整數(shù),換言之就是舍去小數(shù)部分,因此又稱截?cái)嗳≌═runcate)??梢赃@樣理解,先用浮點(diǎn)數(shù)除法進(jìn)行計(jì)算,計(jì)算結(jié)果直接舍去小數(shù)部分。
如:
5/-2=-2.5,所以整數(shù)除法中5/(-2)=-2
-5/2=-2.5,所以整數(shù)除法中-5/2=-2
-5/-2=2.5,所以整數(shù)除法中-5/-2=2
5/2=2.5,所以整數(shù)除法中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個數(shù)值,則
a = 5 輸出為5 理解為 5-0256
a=257 輸出為1 理解為 257-1256
a=-5 輸出為251 理解為-5 - (-1256)
a=-257 輸出為255 理解為 -257 - (-2256)
到此這篇關(guān)于C++中取余運(yùn)算的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++ 取余運(yùn)算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)
這篇文章主要介紹了C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01在C++中實(shí)現(xiàn)aligned_malloc的方法
這篇文章主要介紹了在C++中實(shí)現(xiàn)aligned_malloc的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03C語言動態(tài)規(guī)劃點(diǎn)殺dp算法LeetCode炒股習(xí)題案例解析
這篇文章主要介紹為了C語言動態(tài)規(guī)劃點(diǎn)殺dp算法,本文以LeetCode炒股習(xí)題案例來為大家進(jìn)行詳細(xì)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法
這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法的相關(guān)資料,需要的朋友可以參考下2017-06-06c語言基于stdarg.h的可變參數(shù)函數(shù)的用法
本篇文章主要介紹了c語言基于stdarg.h的可變參數(shù)函數(shù)的用法,詳細(xì)的介紹了可變參數(shù)函數(shù)的詳細(xì)用法和源碼實(shí)例,有興趣的可以了解一下2017-07-07