簡體   English   中英

簡單的布爾邏輯

[英]Simple Boolean Logic

我正在嘗試確定以下表達式(其中ab是正確聲明的布爾變量)計算結果為false

(a && (b || !a)) == a && b

對我來說,這個表達式似乎總是會被評估為真。 如果abfalse ,則相等運算符的兩邊都將計算為false 如果ab都為真,則雙方都將評估為真。 這就是所有選項,它是我在線作業的正確答案。 但是,當我使用 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.

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