Bool类型为True和False

时间:2013-12-03 04:50:12

标签: c++ boolean visual-c++

我正在玩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;
}

我知道使用按位运算符&和逻辑运算符&&之间的区别,但我不知道它是如何产生false(0)值的。我知道如果我交换了按位运算符并使用+表达式0+1会导致它计算为true。有人可以解释为什么这样:

bool $ok = false & true;

评估为假?

3 个答案:

答案 0 :(得分:5)

假= 0(00000000) 真= 1(00000001)

现在,当我们按位运算符(false&amp; true)---(0&amp; 1 = 0)时。

            0x00000000
         &  0x00000001
          -------------
           0x00000000

因此结果为0(0x00000000)

答案 1 :(得分:1)

为什么这是真的? false转换为0值整数。 true转换为非零值整数(通常为1,但不保证这一点)。任何0 & x的{​​{1}}始终为x0通过定义整数/布尔交互,因此输入了错误分支。


对于它的价值,在0和1的域上,0为假,1为真,0 == false映射到*AND映射到+ 。鉴于此,我不太清楚为什么你期望OR+给出相同的结果。

&

值得一提的是,对签名类型的逐位操作往往是个坏主意。如果您要将整数视为位域,请使用无符号整数类型,其中操作的规则更加自然和直观。

答案 2 :(得分:1)

这是因为false为0(从boolean-land转换为integer-land时),而true为1(从boolean-land转换为integer-land时)。

false & true == 0 & 1 == 0 == false
false + true == 0 + 1 == 1 == true

如果&的魔力对你来说是个谜,there are lots of great resources on bitwise-and