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

tilde operator returning -1, -2 instead of 0, 1 respectively

本文关键字:运算符 返回      更新时间:2023-10-16

我对此有点困惑。我认为 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

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

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

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

请注意,即使以 bool 开头,运算符~也会导致该值通过整数提升规则提升为int。如果需要将bool反转为bool,请使用运算符 ! 而不是 ~

~ 是按位 NOT 运算符,这意味着它会翻转所有位。对于布尔值 NOT,您应该使用 !算子