2015-02-12 42 views
4

一个测试题:(false - ~0)(false - NOT(0))等于1?

为什么(false - ~0)1?在32位机~011....11那里有32 1位吧?然后false为int转换也是00....00也是32次吧?所以我们从32 中减去?它是否下溢,我们得到1?

+0

的std ::地图<的std :: string,性病::向量<无符号长长>> – Narek 2015-02-12 06:54:04

+0

重新@thomasMacleod:你的问题是错误的 - 你从32'0' 32'-1'减去。 – 2015-02-12 06:59:19

+0

32'-1'is更多的天才则'是什么类型“ - ”在这种情况下':d – Narek 2015-02-12 07:00:28

回答

9

0int~0int和平等-1false提升为int,你→表达作为(0 - (-1))相当于1计算导致为零。

9

~0计算结果为-1二进制补码表示。因此0 - -1等于1.

编辑: 要稍微精确些。一元~操作应用到文字0,这是一个int,是一个逐位的补操作。然后0的存储器表示在32位体系结构中变为0xffffffff。但是,结果仍然是int。由于所有流行的编译器解释的int内存中表示在补,~0评估为-1

+0

只要我们认为它已经签署,它就成立。但是如果我们将〜0定义为'unsigned int',它仍然会给出1 – Atul 2015-02-12 07:07:57

+0

@Atul,在C++中,文字'0'是一个带符号的int。见ISO C++标准的2.14.2.2。 – ThomasMcLeod 2015-02-12 07:13:19

+0

那么即使我们这样做:'unsigned int zeros = 0; unsigned int ones = 0xFFFFFFFF; unsigned int answer = 0;'still'answer'hold value 1 – Atul 2015-02-12 07:16:29