簡體   English   中英

在 Java 中,三個真輸入的 XOR 返回真。 為什么?

[英]In Java XOR with three true inputs returns true. Why?

以下代碼

System.out.println("1 0 0: " + (true ^ false ^ false));
System.out.println("1 0 1: " + (true ^ false ^ true));
System.out.println("1 1 0: " + (true ^ true ^ false));
System.out.println("1 1 1: " + (true ^ true ^ true));
System.out.println("0 0 0: " + (false ^ false ^ false));
System.out.println("0 0 1: " + (false ^ false ^ true));
System.out.println("0 1 0: " + (false ^ true ^ false));
System.out.println("0 1 1: " + (false ^ true ^ true));

輸出:

1 0 0: true
1 0 1: false
1 1 0: false
1 1 1: true
0 0 0: false
0 0 1: true
0 1 0: true
0 1 1: false

為什么當所有三個輸入都為true true

如果它是有效邏輯,我如何實現僅當輸入元素之一為true時才返回true邏輯(無論我提供多少輸入)?

If you want a true result, if one and only one inputs is true you can use:

(a ^ b ^ c ) ^ ( a && b && c )

the test case result:

true true true = false
true true false = false
true false true = false
true false false = true
false true true = false
false true false = true
false false true = true
false false false = false

因為真異或真=假,假異或真為真。 xor 是關聯的,因此可以按您喜歡的方式對值進行分組!

要確定其中只有一個是正確的,您可以將這些值作為整數相加並查看答案是否為 1。

我將其作為一般編程問題來回答,它確實不是 Java 所特有的。

這是確定一個 boolean 是否為真的 Java 8 方法:

Stream.of(b1, b2, b3, ...)
        .filter(b -> b)
        .count() == 1;

想想編譯器如何評估這個:

(true ^ true) ^ true

在第一項true ^ true (即false )被評估后:

(false) ^ true ==> true

true ^ true ^ true可以(為了理解)寫為( true ^ true ) ^ true ,即為true

如果 A、B、C 是輸入,對於您正在尋找的邏輯,您需要這樣的東西

(A & !B & !C) | (!A & B & !C) | (!A & !B & C)

'^' 是二元邏輯運算符,而不是 n 元運算符。

我不知道它是否被發現並突出顯示,但我注意到如果我們將所有值加在一起(無論有多少)並查看除以 2 后剩下的內容,我們可以注意到如果false 0和如果還剩1則為true

例子:

1 ^ 0 ^ 1 ^ 1 = 1(1+0+1+1)%2 = 1

他們是一樣的。 請糾正或指導我誰對此案有線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM