簡體   English   中英

布爾類型True和False

[英]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.

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