我想知道为什么int,double等比正值多1个负值。
答案 0 :(得分:18)
简而言之:0必须适合某个地方,它是积极的,这使得它们比负数少。
示例:负数为5个槽,正数为5个,负数为-1到-5,正数为0到4
正如@WhozCraig所指出的,这仅适用于使用带符号二进制数的二进制补码表示的体系结构。
答案 1 :(得分:3)
假设您有一个使用4位的整数数据类型。您可以用它们表示16个可能的有符号整数。正整数值分配给范围的前半部分:
0000b = 0
0001b = 1
0010b = 2
0011b = 3
0100b = 4
0101b = 5
0110b = 6
0111b = 7
下半场有两种选择:
-1
到 -7
,特殊值 -0
。这用于一个补码和符号和数量数字表示。-1
到 -8
。这是大多数程序员熟悉的two's complement representation使用的(以及您正在谈论的那个)。负数的映射如下:
1000b = -8
1001b = -7
1010b = -6
1011b = -5
1100b = -4
1101b = -3
1110b = -2
1111b = -1
虽然这可能没有意义,但这种映射可以很容易地执行算术运算。
这不适用于花车;它们的表现方式不同。大多数浮点表示在+ 0 / -0两侧都有相等的范围。
答案 2 :(得分:0)
对于C,不能保证你将在具有二进制补码算术硬件的机器上运行(一个比正数更负)。实际上,它可能就是这样。