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