(false - NOT(0))等于1?

时间:2015-02-12 06:48:52

标签: c++

测试问题:(false - ~0)

的结果是什么

为什么(false - ~0)1?在32位机器上~011....11,其中有32 1位正确吗?然后false到int转换00....00也是32次,对吗?我们从32 0 32 1中减去?它下溢了,我们得到1?

2 个答案:

答案 0 :(得分:9)

0 int~0int,等于-1false被提升为int,结果为(0 - (-1))在零→您的表达式计算为1,等于{{1}}。

答案 1 :(得分:9)

~0在2s补码表示中求值为-1。所以0 - -1确实等于1.

修改 更准确一点。应用于文字~的一元0运算符是int,是一个逐位补码运算符。然后,0的内存表示在32位体系结构中变为0xffffffff。但是,结果仍然是int类型。由于所有流行的编译器都将int的内存表示解释为两个补码,~0计算为-1