我正在玩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;
评估为假?
答案 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}}始终为x
。 0
通过定义整数/布尔交互,因此输入了错误分支。
对于它的价值,在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。