2011-10-11 30 views
0

如果我的模塊化部門是正確的; 1/5 mod 11 = 9。有人能證實這一點嗎?java模塊化部門健全性檢查

但是,在Java中; 1/5 % 11 = 0;

我不確定這裏發生了什麼,它是我的語法,是否需要將它括起來?

我現在越來越困惑:)

有人可以建議嗎?

由於

回答

2

即相同(1/5)MOD 11.

(或備選地相同爲1 /(5 MOD 11),其仍然是1/5 == 0 [從左至右它實際上將是(1/5)模11雖然])

5分之1= 0(對於整數)

0模11 = 0

+0

謝謝,我明白爲什麼會這樣。我將不得不做更多的研究。謝謝 – Tony

-1

http://www.difranco.net/cop2551/java_op-prec.htm表示*,/和%有th相同的優先順序,但是在表達式中/優先於%。所以上面的Java結果在JLS中是正確的。

+0

您引用的鏈接絲毫不支持您的答案,而您的答案體現了矛盾之處。要麼它們具有相同的優先級,要麼優先於另一個。事實上,優先級相同的運算符從左到右進行評估。這些都不足以解釋OP的問題。 – EJP

-1

這是因爲運算符的優先級。

Java確實通過它簡化了快遞。它做了一些操作,然後在下一個過程中做了一些其他操作。 「最高」的操作員首先完成。例如,乘法在加法之前。運營商()是第一次通過,並讓您覆蓋正常順序的事情完成。

參見以下圖表:enter link description here

%是在相同的基團作爲*/。他們完成從左到右。

所以,你要(1/5) % 11

但你有這將在浮點運算來完成另外一個問題,所以你會得到一個近似而不是精確的正確答案。

您需要使用BigInteger類而不是內置原語。

+0

「Java確實通過了簡化表達式的地方,它執行一些操作,然後在下一次執行時它會執行一些操作。」這根本不是那麼回事。和任何其他編程語言一樣,Java使用RPN和堆棧來評估表達式。沒有多個「通行證」。簡單來說,運營商在RPN中發生的順序就是這樣。 – EJP

+0

我在這下,你是正確的。但是,我正在簡化初學者的答案。 –

+0

通過使答案比實際更復雜來簡化答案? – EJP

2

1/5 mod 11 = 9.有人可以證實嗎?

(9 * 5)%11 = 45%11 = 1.所以,9是'mod 11'域的模的乘法倒數5。

問題是:Java只有整數,沒有模運算。在Java中,%只是一個運算符,如*

http://en.wikipedia.org/wiki/Modular_arithmetic

模運算的概念是相關到了在餘數的。

所以,mod 11% 11是相關但不是相同的東西!

+0

你是對的。我以錯誤的方式接近它。爲了得到我的答案,我剛剛實現並測試了這個:如果(i * y%mod == 1){ (012)一世); } } 感謝您的幫助 – Tony