2017-04-05 91 views
-3

目前我正在使用Java中的%運算符。我以爲我明白了,但在遇到這個問題後,我現在感到困惑。所以我知道10%3 =剩餘1。我的問題是爲什麼會3%8 =剩餘3我認爲這將等於0,因爲3進入8個零次?另一個例子是2%8 =剩餘2爲什麼這個剩餘部分不會爲零?如果有人能夠解釋爲什麼這是真棒!謝謝!如何使用餘數運算符

+3

其他方式,'8'進入'3'零次,剩下一個'3'。 '%'與'/'(或分區)互補。 '2/8'爲'0',所以餘數是原始值(或'2')。對於餘數爲'0',該數字必須可被8整除。所以,8,16,24,32,40等。 –

+0

_3進入8次零次_不是真3進8次兩次。你的想法倒退了。 8進入3個零次,我們仍然有3個剩餘的 – JackVanier

+0

這不是一個模數運算符。它是*餘數*運算符。 – EJP

回答

0

從數學上講,這是正確的行爲。

希望人們會放縱我一個題外話,但整數mod n都是從0到n - 1的整數。它們形成對數論和密碼學非常重要的multiplicative group。事實上,如果你這樣做

for (int i = 0; i < x; i++) { 
    Console.WriteLine(i % n); 
} 

這會給你所有的從0到(n - 1)數字一遍又一遍,就像組。

毋庸置疑,mathematical group是一組操作,它的行爲或多或少像您預期的那樣使用「普通」算術。例如,如果一個集合在乘法下形成一個組,那意味着該集合的乘法「起作用」。

如果n是素數的冪(例如32),則整數mod n形成finite field,這意味着它的行爲與普通算術相當。

TL; DR此行爲是設計使然。它在數學上也是完全正確的。