我在C中%操作符有問題。我知道%操作符給出了除法的其餘部分。但是當遇到像1 % 2
或3 % 2
這樣的問題時,我感到困惑。 Google搜索後,我找到了不同的解決方案。C語言中%操作符的問題
有人說,作爲1/2
是0.5
,我們四捨五入下來到0。所以1 % 2
爲0
也有人說,作爲1/2
是0.5
,我們反而圓了起來,就像我們會在數學,1因此1 % 2
是1.
因此,我現在感到困惑。我的問題是:什麼是1%2?
預先感謝您:) :)
我在C中%操作符有問題。我知道%操作符給出了除法的其餘部分。但是當遇到像1 % 2
或3 % 2
這樣的問題時,我感到困惑。 Google搜索後,我找到了不同的解決方案。C語言中%操作符的問題
有人說,作爲1/2
是0.5
,我們四捨五入下來到0。所以1 % 2
爲0
也有人說,作爲1/2
是0.5
,我們反而圓了起來,就像我們會在數學,1因此1 % 2
是1.
因此,我現在感到困惑。我的問題是:什麼是1%2?
預先感謝您:) :)
簡而言之,兩者都是錯誤的方法。正如你所說%
發現其餘部門。
因此1/2等於0餘1
答案是這樣1.
此外,試驗自己,你也可以使用此程序:
#include <stdio.h>
main()
{
int remainder;
remainder = 1 % 2;
printf("1 %% 2 is %d", remainder);
return(0);
}
希望這有助於:)
非常感謝,這使事情更清晰 –
沒有四捨五入,小數部分被簡單地截取。
所以,二分之一是0和1%2是1
想想M%D(如果M和D都是正數)的簡單方法是:
While (M >= D){
M = M-D;
}
return M;
這裏您需要餘數的數學定義。
給定兩個整數米,d,我們說[R是米和d如果[R滿足兩個條件劃分的其餘:
m == k * d + r
和0 <= r < d
。在C中,我們有m % d == r
和m/d == k
,只是按照上面的定義。
正如你所看到的那樣,根本沒有任何拘泥(我的意思是:「截斷」是定義的結果)。
從定義,可以obtainded即3%2 == 1和3/2 == 1
其它實例:
4/3 == 1和5/3 == 1,儘管5.0/3.0 == 1.6666(其中 將舍入爲2.0)。
4%3 == 1個5%3 == 2.
您也可以相信式r = m - k * d
,其在C被寫爲:
m % d == m - (m/d) * d
然而在標準C中,整數除法遵循以下規則:round to 0
。
因此,負數的操作數C提供了不同的結果,即數學的結果。
我們將有:
(-4)/ 3 == -1,(-4)%3 == -1(在C),但在普通的數學:(-4)/ 3 = -2,(-4)%3 = 2.
在普通數學中,其餘總是非負的,並且小於abs(d)
。
在標準C中,其餘部分總是具有第一個運算符的符號。
備註:此說明(否定的情況下)僅適用於標準C99/C11。你必須小心你的編譯器版本,並做一些測試。
對於M%D,無論何時M
Jiminion
@Jim我認爲你想要「0 <= M
chux
@chux,對於上述斷言是肯定的,M和D需要大於0. – Jiminion