6

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

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

4

2 回答 2

10

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

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

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

于 2014-02-24T00:21:35.907 回答
0

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

于 2014-02-24T00:22:48.690 回答