一个测试题:(false - ~0)
(false - NOT(0))等于1?
为什么(false - ~0)
是1
?在32位机~0
是11....11
那里有32 1
位吧?然后false为int转换也是00....00
也是32次吧?所以我们从32 中减去?它是否下溢,我们得到1?
一个测试题:(false - ~0)
(false - NOT(0))等于1?
为什么(false - ~0)
是1
?在32位机~0
是11....11
那里有32 1
位吧?然后false为int转换也是00....00
也是32次吧?所以我们从32 中减去?它是否下溢,我们得到1?
0
是int
→~0
是int
和平等-1
→false
提升为int
,你→表达作为(0 - (-1))
相当于1
计算导致为零。
~0
计算结果为-1二进制补码表示。因此0 - -1等于1.
编辑: 要稍微精确些。一元~
操作应用到文字0
,这是一个int
,是一个逐位的补操作。然后0
的存储器表示在32位体系结构中变为0xffffffff
。但是,结果仍然是int
。由于所有流行的编译器解释的int
内存中表示在补,~0
评估为-1
。
只要我们认为它已经签署,它就成立。但是如果我们将〜0定义为'unsigned int',它仍然会给出1 – Atul 2015-02-12 07:07:57
@Atul,在C++中,文字'0'是一个带符号的int。见ISO C++标准的2.14.2.2。 – ThomasMcLeod 2015-02-12 07:13:19
那么即使我们这样做:'unsigned int zeros = 0; unsigned int ones = 0xFFFFFFFF; unsigned int answer = 0;'still'answer'hold value 1 – Atul 2015-02-12 07:16:29
的std ::地图<的std :: string,性病::向量<无符号长长>> – Narek 2015-02-12 06:54:04
重新@thomasMacleod:你的问题是错误的 - 你从32'0' 32'-1'减去。 – 2015-02-12 06:59:19
32'-1'is更多的天才则'是什么类型“ - ”在这种情况下':d – Narek 2015-02-12 07:00:28