2012-05-09 102 views
6

我一直卡在的部分是 boolean(0 % 2 !=0) == false。我的意思是如果2進入0,0次,那麼剩下的將是2,而2不等於0.所以它應該是真的。但是,當我把我的Java程序中的布爾值,它被視爲假。有人知道爲什麼`java(0%2!= 0)== false`

我可以包裹我的頭的唯一合乎邏輯的答案是,也許整數進入0和無限次數,因此被認爲是假的,任何人?

+0

我很積極,這不是一個編碼錯誤,我直接從我的書中複製這個,它也在我的講座中多次引用。 – Michael

+0

這就是......不是'%'的意思。 –

回答

24

有兩個步驟:

  • 0 % 2評估爲0

  • 0 != 0評估爲false

爲了詳細說明在第一步驟中,JLS defines%操作者像這樣:

二進制%操作者被說成從一個隱含的除法得到其操作數的剩餘部分;左邊的操作數是紅利,右邊的操作數是除數。

的劃分0通過2的其餘部分0和你似乎認爲不2

+5

我通常不會+1真正基本的東西,但出於一些奇怪的原因,這個讓我發笑。 – Mysticial

2

%返回除法後的餘數。除以任何東西(本身除外!)爲零,所以沒有餘數。因此0 % 20

+4

零除以任何東西*除零*爲零 – aioobe

+0

這個現代數學是如此莫名其妙:-) –

+0

哈哈,很好的捕捉:)修正! –

4

0%2 = 0,因爲0/2 = 0和提醒0,或者0 * 2 +提醒= 0

你只是誤解模量。

0

如果2進入0,0次,然後剩餘部分將是2.

它不是2 goes into 00 goes into 2,所以等分的結果爲0,並且該提醒是0。

+1

你的意思是「分裂」和「剩餘」......(提醒是你在Postit紙條上寫的,而devision不是英語單詞......雖然它可能是一種中世紀折磨形式的委婉說法。 「這個囚犯被帶到了地下城,並被一把紅熱的撲克」剔除「了。) –

1

我想你混合了0%2和2%0(這是不可能的)。 0%n是始終等於0

OK,讓我們剖析該...

1)0 % 2

模是有限分裂的其餘部分。例如10%3是10/3的其餘部分。 10/3是3 +⅓。所以其餘的是1.

0%2是0/2的其餘部分。 0/2 = 0,沒有休息,因此0%2 = 0。

2)0 % 2 != 0

這意味着0%2不同於0。現在我們知道這是假的。

3)boolean(0 % 2 != 0)

它只是鑄造。您將結果轉換爲布爾值。它不僅僅是一個錯誤的假設,它取得了Java值false

4)​​

==意味着有一個測試在這裏。測試可以簡化(如上所示)爲false == false。是false等於false?是的。結果是true

0

它與運算符優先級有關,也就是Java解釋器對運算符進行評估的順序。

查看here的文檔。一種有用的縮寫,是BUDMASRELCA - 球拍,ü進制,d IV- 中號 ultiplication(實際上乘法因爲它包括模), ddittion- 小號 ubtraction,ř elational,E quality,L ogical,C傳統(三元),A調整。 我錯過了按位運算符,但它們可以分組在邏輯下,它們優先於正常的邏輯運算符。

0%2!= 0爲0%評價2(乘法)第一和然後它的結果0與!= 0。(平等)

在內部評價,編譯器構建的二進制表達式樹來表示順序,如下所示,使用運算符作爲根和葉作爲值或進一步的運算符(在遞歸情況下)。因此,需要評估具有運算符的子樹,然後才能使用它的葉子值對根運算符進行評估。

!= 
/\ 
% 0 
/\ 
0 2 
相關問題