C語言中四種取整方式,取餘/取模運算以及負數取模問題詳解

零向取整、負無窮向取整、正無窮向取整、四舍五入取整

如果將一個浮點數賦值給整形,隻會保存整數位:

在這裡插入圖片描述

這種取整方式為零向取整,C語言默認采用的是這種方式

在這裡插入圖片描述

C語言中也有對應的零向取整函數:

在這裡插入圖片描述

在這裡插入圖片描述

同理還有一種函數是負無窮大取整:

在這裡插入圖片描述

在這裡插入圖片描述

它的取整方案是向負無窮大取整:

在這裡插入圖片描述

有地板取整,當然也有正無窮大取整的函數:

在這裡插入圖片描述

在這裡插入圖片描述

它的取整方式是向正無窮大取整:

在這裡插入圖片描述

最後,還有四舍五入取整的函數:

在這裡插入圖片描述

在這裡插入圖片描述

取模/取餘

取模概念: 如果a和d是兩個自然數,d非零,可以證明存在兩個唯一的整數 q 和 r,滿足 a = q*d + r 且0 ≤ r < d。其中,q 被稱為商,r 被稱為餘數。所以q=a/d,r=a%d。

但是如果對負數取模呢?

在C語言中:

在這裡插入圖片描述

在Python中:

在這裡插入圖片描述

可以看到這兩種取模結果是不一樣的。

a=-10,d=3;
-10=(-3)*3+(-1)  q=-3,r=-1;  C語言
-10=(-4)*3+2  q=-4,r=2; Python

由上面的例子可以看出,具體餘數r的大小,本質是取決於商q的。 而商取決於除法計算的時候的取整規則。

比如上面的-10/3=-3.3333,如果將商向零整,則結果為-3,此時餘數為-1,而如果商向負無窮方向取整,則結果為-4,此時餘數為2。

這兩種取整方式,就是取模和取餘的區別:

取餘或者取模,都應該要算出商,然後才能得出餘數。
取餘:盡可能讓商,進行向零取整。
取模:盡可能讓商,向負無窮方向取整

這兩種方式對於商是正數的情況沒有區別,因為零向取整和負無窮方向取整的結果是一樣的。但如果商的結果是負數,則取餘和取模的結果是不一樣的。

所以,參與取餘的兩個數據,如果同符號,取模等價於取餘,因為商是正數,如果不同符號,則取模和取餘不同。

在這裡插入圖片描述

綜上,C語言中的%本質其實是取餘,Python中的%本質是取模。

並且通過上面的分析,我們可以得出結論:

具體餘數r的大小,本質是取決於商q的。而商,又取決於除法計算的時候,取整規則。
取餘和取模: 取餘盡可能讓商,進行向零取整。取模盡可能讓商,向負無窮方向取整。
參與取餘的兩個數據,如果同符號,取模等價於取餘。
如果參與取餘的兩個數據符號不同,在C語言中(或者其他采用向0取整的語言如:C++,Java),餘數符號,與被除數相同。(因為采用的向0取整)

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: