程式語言中取模和取餘的區別

2021-10-06 22:48:50 字數 780 閱讀 9411

取餘,遵循盡可能讓商向0靠近的原則。

取模,遵循盡可能讓商向負無窮靠近的原則。

如圖所示:

符號相同時,兩者不會衝突。

比如,7/3=2.3,產生了兩個商2和3

7=3x2+1 或 7=3x3+(-2)。

因此,7rem3=1,7mod3=1。

符號不同時,兩者會產生衝突。

比如,7/(-3)=-2.3,產生了兩個商-2和-3

7=(-3)x(-2)+1或7=(-3)x(-3)+(-2)。

因此,7rem(-3)=1,7mod(-3)=(-2).

為什麼遵循的是這樣的原則?

在matlab中,關於取餘和取模是這麼定義的:

當y≠0時:

取餘:rem(x,y)=x-y.xfix(x./y)

取模:mod(x,y)=x-y.xfloor(x./y)

其中,fix()函式是向0取整,floor()函式是向負無窮取整。

以前邊的運算為例:7/(-3)=-2.3,在這個運算中,x為7,y為-3,分別呼叫fix()和floor()兩個函式,得到結果是:

fix(-2.3)=-2

floor(-2.3)=-3,

rem(7,-3)=1,mod(7,-3)=-2

參考連線:

取餘和取模

對於整型數a,b來說,取模運算或者求餘運算的方法都是 1.求 整數商 c a b 2.計算模或者餘數 r a c b.但是求模運算和求餘運算在第一步不同 求餘運算在取c的值時,向0 方向捨入 int強制轉換 而取模運算在計算c的值時,向負無窮大方向捨入 floor 函式 因此,當a和b符號一致時,求...

取模和取餘

近日在讀c primer第五版,在2.1.2型別轉換一節中,有這樣乙個例子 unsigned char c 1 假設char佔8位元,c的值位255當看到255這個值,一臉矇圈,為什麼是這個值呢?書上的解釋是 當我們賦給無符號型別乙個超出它表示範圍的值時,結果是初始值對無符號型別表示數值總數取模後的...

取餘和取模的區別以及c語言當中的取餘 運算

一 區別在c c 中 為取餘符,而在python中 為取模符 對整數a,b取餘和取模統一都分為2步 第一步 求整數商,c a b 第二步 計算模或餘數,r a c b 這裡,第二步對於取餘還是取模都是相同的,因為減法和乘法一般不會帶來誤差 但是對於第一步,除法會帶來誤差,取餘在計算c時是向0的方向捨...