c++ - 波浪号运算符分别返回 -1、-2 而不是 0、1

标签 c++ boolean tilde

我对此有些疑惑。我认为 C++ 中的 ~ 运算符应该以不同的方式工作(不是 Matlab-y)。这是一个最小的工作示例:

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
    bool banana = true;
    bool peach = false;
    cout << banana << ~banana << endl;
    cout << peach << ~peach << endl;
}

这是我的输出:

1-2
0-1

我希望有人对此有所了解。

最佳答案

这正是应该发生的事情:当你反转零的二进制表示时,你得到负一;当您反转 1 的二进制表示时,您会得到二进制补码表示中的负 2。

00000000 --> ~ --> 11111111 // This is -1
00000001 --> ~ --> 11111110 // This is -2

请注意,即使您以 bool 开头,运算符 ~ 也会根据整数规则将值提升为 int促销事件。如果您需要将 bool 反转为 bool,请使用运算符 ! 而不是 ~

关于c++ - 波浪号运算符分别返回 -1、-2 而不是 0、1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976630/

相关文章:

c++ - Win32 Audio API endpointVolume 接口(interface)返回错误的 channel 数

java - Java中的“〜”(波浪号)运算符是什么?

image - Tilde图像在MATLAB中是什么意思?

c++ - 为什么我的 C++ 程序在特定输入时崩溃?

c++ - 如何为 main() 中的所有 for 循环构建一个类(只是为了减少主函数中的代码)

c++ - 作为变量的 Symbol 的值是 void :company-c-headers

java - 为什么将 boolean 原始值更改为 boolean 对象引用?

java - 为什么 if(Boolean.TRUE) {...} 和 if(true) {...} 在 Java 中的工作方式不同

c++ - bool 类型的按位运算和逻辑运算相同吗?

latex - 使用 LaTeX 在 Python 中使用 LaTex "~"符号