gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:32:59 24 4
gpt4 key购买 nike

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

所以我知道以下作品:

!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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com