[英]Bool type True and False
我正在玩Bool類型(布爾變量)並輸入以下內容:
#include <iostream>
int main(void)
{
using std::cout;
using std::cin;
using std::endl;
bool $ok = false & true;
if($ok == true)
{
cout << "The value is True." << endl;
}
else if($ok == false)
{
cout << "The value is false." << endl;
}
cin.get();
cin.get();
return 0;
}
我知道使用按位運算符&
和邏輯運算符&&
之間的區別,但是我看不到它如何產生錯誤的(0)值。 我知道如果我交換按位運算符並使用+
則表達式0+1
會使它的計算結果為true
。 有人可以解釋為什么:
bool $ok = false & true;
評估為假?
false = 0(0x00000000)true = 1(0x00000001)
現在,當我們按位和(false&true)---(0&1 = 0)的運算符時。
0x00000000
& 0x00000001
-------------
0x00000000
因此結果是0(0x00000000)
為什么會這樣呢? false
轉換為0值的整數。 true
轉換為非零值整數(通常為1,但這不能保證)。 任何x
0 & x
始終為0
。 0 == false
根據整數/布爾相互作用的定義為0 == false
,因此進入false分支。
對於它的值,在0和1的域中,0表示false,1表示true, *
映射為AND
而+
映射為OR
。 鑒於此,我不太確定為什么您期望+
和&
給出相同的結果。
x * y != 0 iff x != 0 and y != 0
x + y != 0 iff x != 0 or y != 0
還值得一提的是,對有符號類型進行按位操作通常是個壞主意。 如果要將整數視為位域,請使用無符號整數類型,其中圍繞操作的規則更加自然和直觀。
這是因為false
為0(從布爾值轉換為整數值時),而true
為1(從布爾值轉換為整數值時)。
false & true == 0 & 1 == 0 == false
false + true == 0 + 1 == 1 == true
如果&
的魔力對您來說是個謎,那么按位-和有很多很棒的資源 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.