[英]Simple Boolean Logic
我正在嘗試確定以下表達式(其中a
和b
是正確聲明的布爾變量)計算結果為false
:
(a && (b || !a)) == a && b
對我來說,這個表達式似乎總是會被評估為真。 如果a
或b
為false
,則相等運算符的兩邊都將計算為false
。 如果a
和b
都為真,則雙方都將評估為真。 這就是所有選項,它是我在線作業的正確答案。 但是,當我使用 Java 11 JVM 在 IntelliJ CE 中運行它時,似乎每當b
為假時它都會打印假:當 a 和 b 都為假時,IntelliJ 輸出假
當 b 為假而 a 為真時,我得到相同的輸出。 有人可以解釋我的邏輯錯誤在哪里嗎? 非常感謝。
我認為它讓==
操作優先於&&
嘗試這個 -
(a && (b || !a)) == (a && b)
你的代碼應該是:
boolean c = (a && (b || !a)) == (a && b);
否則它被評估為:
boolean c = ((a && (b || !a)) == a) && b;
布爾運算具有等效的數學運算(這是 CPU 最終要做的)。 您可以使用此方法檢查任何等式,以確保其結果符合您的預期。 它可以幫助您快速查看您的布爾邏輯是否適用於所有情況。
在這里使用你的方程是一個例子:
將“true”替換為 1,將“false”替換為 0。將 && 替換為 *(如乘法)和 || 與 + (如添加)。 ! 做你所期望的。 然后檢查相等性
a*(b+!a) == a*b
然后當 a = false (0) 和 b = false(0) 我們有
0*(0+1) == 0*0
or 0=0
這是真的。
我們可以繼續使用其他選項進行檢查。
a=1, b=1
1*(1+0) == 1*1
or 1=1
再次,真的
a=1, b=0
1*(0+1) == 1*0
1*1=0?
不正確(錯誤)。
通過最后一個測試,我們可以看到這個等式並不總是評估為真。 就像在數學中一樣,布爾運算有一個運算順序(正如許多其他人所提到的),但我喜歡使用這種方法來確保我的方程按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.