gpt4 book ai didi

c++ - 为什么当 bool = true 时补码运算符不起作用?

转载 作者:IT老高 更新时间:2023-10-28 21:55:09 25 4
gpt4 key购买 nike

我已经编写了这个 C++ 程序,但我无法理解为什么它在第三个 cout 语句中打印 1

#include<iostream>

using namespace std;

int main()
{
bool b = false;
cout << b << "\n"; // Print 0
b = ~b;
cout << b << "\n"; // Print 1
b = ~b;
cout << b << "\n"; // Print 1 **Why?**
return 0;
}

输出:

0
1
1

为什么不打印以下内容?

0
1
0

最佳答案

这是由于 C 遗留的运算符机械化(还记得 ~bitwise 补码)。 ~ 的整数操作数在执行操作之前被提升为 int,然后转换回 bool。所以你得到的是(使用无符号32位表示)false -> 0 -> 0xFFFFFFFF -> true。然后 true -> 1 -> 0xFFFFFFFE -> 1 -> true

您正在寻找 ! 运算符来反转 boolean 值。

关于c++ - 为什么当 bool = true 时补码运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148897/

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