在c ++中打印一个布尔值

时间:2013-12-05 18:47:39

标签: c++

当我运行这个简单的代码时,

int main(int argc, const char * argv[])
{
      bool digit(true);
      std::cout << digit << " " << ~digit << std::endl;
}

输出

1 -2

我期待1和0(对于真和假)。我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:13)

~执行按位否定。操作数被提升(在这种情况下)到int,并且所有位都被反转。 1具有00....001的二进制表示,因此这给出了二进制值11....110,它在大多数现代计算机上被解释为-2。

使用!进行逻辑否定。

答案 1 :(得分:4)

~是按位非(或位反转)运算符。逻辑非运算符是'!'。

    cout << !digit;

答案 2 :(得分:1)

你需要一个逻辑非运算符是'!'。你可以试试这个;

cout << !(digit);

修改: -

虽然我知道它已经很晚但是试图改进我的答案,~是按位非运算符。因此,如果您编写~1000之类的内容,那么结果将是0001

答案 3 :(得分:1)

本质:

 1 -> 00000001
~1 -> 11111110

答案 4 :(得分:0)

4 bits integer
1 -> 0001

find the complement by adding 1
0001 + 0001 = 0010 = 2

the complement is -2