c++ - 按位不和逻辑不 : Why ~true == true and ~false == false

标签 c++ boolean bit-manipulation

我有一个关于按位非逻辑非的问题,希望有人能为我解答。

所以我知道以下作品:

!true == false
!false == true

我认为按位非可以做同样的事情,但它显然不能。

假设我有一个 boolean 值:

bool test = true;

然后当我打印出 ~test 时,输出为 true

如果 boolean 值是

bool test = false;

然后当我打印出 ~test 时,输出为 true,这是预期的。但是,当我再次执行 ~test 时,它不会返回到 false

由于某些原因,按位非不能将 boolean 值从true翻转为false

有人对此有答案吗?

最佳答案

根据 C++ 标准 ([expr.unary.op]) 的 §5.3.1.10,~运算符采用整数(或无作用域枚举类型)操作数并执行整数提升,其中 ~ 的结果类型operation 是其提升的操作数的类型。这意味着 boolean 值首先被转换为整数( 0false1true )。由于您的上下文,~ 的结果然后将操作转换回 boolean 值:false对于 0true对于所有非零值。

如果你有一个 boolean 值 x ,你可以想到~x作为~static_cast<int>(x)x = ~x作为x = ((~static_cast<int>(x)) != 0) .

因此:

bool a = false;
bool b = ~a; // b = (~static_cast<int>(a) != 0)
             // b = (~static_cast<int>(false) != 0)
             // b = (~0 != 0)
             // b = (0xffffffff != 0)
             // b = true
bool c = ~b; // c = (~static_cast<int>(b) != 0)
             // c = (~static_cast<int>(true) != 0)
             // c = (~1 != 0)
             // c = (0xfffffffe != 0)
             // c = true

关于c++ - 按位不和逻辑不 : Why ~true == true and ~false == false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25211940/

相关文章:

c++ - CHAR_BIT 的更好名称?

c++ - 双向链表 2 个值 C++

python - 在 Python 中解决符号 boolean 变量

python - Python 中只有一个 True 和一个 False 对象吗?

javascript - 这个按位运算的技术名称是什么?

javascript - 表示数字的位数

c - 赋予一个变量另一个不同类型的变量

c++ - 为什么我不能在我的复制构造函数中使用 std::copy?

c++ - 我的电脑缺少 SDL.dll - VS 2010

java - 我正在尝试用 Java 将与投注相关的组件添加到我的游戏中,但程序在要求投注金额后停止工作