C語(yǔ)言中四種取整方式,取余/取模運(yùn)算以及負(fù)數(shù)取模問(wèn)題詳解
零向取整、負(fù)無(wú)窮向取整、正無(wú)窮向取整、四舍五入取整
如果將一個(gè)浮點(diǎn)數(shù)賦值給整形,只會(huì)保存整數(shù)位:

這種取整方式為零向取整,C語(yǔ)言默認(rèn)采用的是這種方式

C語(yǔ)言中也有對(duì)應(yīng)的零向取整函數(shù):


同理還有一種函數(shù)是負(fù)無(wú)窮大取整:


它的取整方案是向負(fù)無(wú)窮大取整:

有地板取整,當(dāng)然也有正無(wú)窮大取整的函數(shù):


它的取整方式是向正無(wú)窮大取整:

最后,還有四舍五入取整的函數(shù):


取模/取余
取模概念: 如果a和d是兩個(gè)自然數(shù),d非零,可以證明存在兩個(gè)唯一的整數(shù) q 和 r,滿足 a = q*d + r 且0 ≤ r < d。其中,q 被稱為商,r 被稱為余數(shù)。所以q=a/d,r=a%d。
但是如果對(duì)負(fù)數(shù)取模呢?
在C語(yǔ)言中:

在Python中:

可以看到這兩種取模結(jié)果是不一樣的。
a=-10,d=3; -10=(-3)*3+(-1) q=-3,r=-1; C語(yǔ)言 -10=(-4)*3+2 q=-4,r=2; Python
由上面的例子可以看出,具體余數(shù)r的大小,本質(zhì)是取決于商q的。 而商取決于除法計(jì)算的時(shí)候的取整規(guī)則。
比如上面的-10/3=-3.3333,如果將商向零整,則結(jié)果為-3,此時(shí)余數(shù)為-1,而如果商向負(fù)無(wú)窮方向取整,則結(jié)果為-4,此時(shí)余數(shù)為2。
這兩種取整方式,就是取模和取余的區(qū)別:
取余或者取模,都應(yīng)該要算出商,然后才能得出余數(shù)。
取余:盡可能讓商,進(jìn)行向零取整。
取模:盡可能讓商,向負(fù)無(wú)窮方向取整
這兩種方式對(duì)于商是正數(shù)的情況沒(méi)有區(qū)別,因?yàn)榱阆蛉≌拓?fù)無(wú)窮方向取整的結(jié)果是一樣的。但如果商的結(jié)果是負(fù)數(shù),則取余和取模的結(jié)果是不一樣的。
所以,參與取余的兩個(gè)數(shù)據(jù),如果同符號(hào),取模等價(jià)于取余,因?yàn)樯淌钦龜?shù),如果不同符號(hào),則取模和取余不同。

綜上,C語(yǔ)言中的%本質(zhì)其實(shí)是取余,Python中的%本質(zhì)是取模。
并且通過(guò)上面的分析,我們可以得出結(jié)論:
具體余數(shù)r的大小,本質(zhì)是取決于商q的。而商,又取決于除法計(jì)算的時(shí)候,取整規(guī)則。
取余和取模: 取余盡可能讓商,進(jìn)行向零取整。取模盡可能讓商,向負(fù)無(wú)窮方向取整。
參與取余的兩個(gè)數(shù)據(jù),如果同符號(hào),取模等價(jià)于取余。
如果參與取余的兩個(gè)數(shù)據(jù)符號(hào)不同,在C語(yǔ)言中(或者其他采用向0取整的語(yǔ)言如:C++,Java),余數(shù)符號(hào),與被除數(shù)相同。(因?yàn)椴捎玫南?取整)
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Matlab處理圖像后實(shí)現(xiàn)簡(jiǎn)單的人臉檢測(cè)
本文主要介紹一下如何使用matlab進(jìn)行圖像處理后實(shí)現(xiàn)人臉檢測(cè),感興趣的可以了解一下2021-11-11
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的聊天室功能
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
利用C++實(shí)現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點(diǎn)
利用C++實(shí)現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點(diǎn)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10
C語(yǔ)言數(shù)組學(xué)習(xí)之特殊矩陣的壓縮存儲(chǔ)
矩陣在計(jì)算機(jī)圖形學(xué)、工程計(jì)算中都占有舉足輕重的地位,本文將討論如何將矩陣更有效地存儲(chǔ)在內(nèi)存中,并且能夠方便地提取矩陣中的元素。感興趣的同學(xué)可以了解一下2021-12-12
用C++面向?qū)ο蟮姆绞絼?dòng)態(tài)加載so的方法
下面小編就為大家?guī)?lái)一篇用C++面向?qū)ο蟮姆绞絼?dòng)態(tài)加載so的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12

