当我运行这个简单的代码时,
int main(int argc, const char * argv[])
{
bool digit(true);
std::cout << digit << " " << ~digit << std::endl;
}
输出
1 -2
我期待1和0(对于真和假)。我在这里错过了什么吗?
答案 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