繁体   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