测试问题:(false - ~0)
为什么(false - ~0)
是1
?在32位机器上~0
是11....11
,其中有32 1
位正确吗?然后false到int转换00....00
也是32次,对吗?我们从32 0
32 1
中减去?它下溢了,我们得到1?
答案 0 :(得分:9)
0
int
→~0
为int
,等于-1
→false
被提升为int
,结果为(0 - (-1))
在零→您的表达式计算为1
,等于{{1}}。
答案 1 :(得分:9)
~0
在2s补码表示中求值为-1。所以0 - -1确实等于1.
修改强>
更准确一点。应用于文字~
的一元0
运算符是int
,是一个逐位补码运算符。然后,0
的内存表示在32位体系结构中变为0xffffffff
。但是,结果仍然是int
类型。由于所有流行的编译器都将int
的内存表示解释为两个补码,~0
计算为-1
。