为什么int 1的最小值比正值更远离零?

时间:2013-01-12 07:22:24

标签: java c++ c math numbers

我想知道为什么int,double等比正值多1个负值。

3 个答案:

答案 0 :(得分:18)

简而言之:0必须适合某个地方,它是积极的,这使得它们比负数少。

示例:负数为5个槽,正数为5个,负数为-1到-5,正数为0到4

  • 别忘了阅读@chris链接:)

正如@WhozCraig所指出的,这仅适用于使用带符号二进制数的二进制补码表示的体系结构。

答案 1 :(得分:3)

假设您有一个使用4位的整数数据类型。您可以用它们表示16个可能的有符号整数。正整数值分配给范围的前半部分:

0000b = 0
0001b = 1
0010b = 2
0011b = 3
0100b = 4
0101b = 5
0110b = 6
0111b = 7

下半场有两种选择:

  1. 将8个位置映射到整数 -1 -7 ,特殊值 -0 。这用于一个补码符号和数量数字表示。
  2. 将8个位置映射到整数 -1 -8 。这是大多数程序员熟悉的two's complement representation使用的(以及您正在谈论的那个)。

  3. 负数的映射如下:

    1000b = -8
    1001b = -7
    1010b = -6
    1011b = -5
    1100b = -4
    1101b = -3
    1110b = -2
    1111b = -1
    

    虽然这可能没有意义,但这种映射可以很容易地执行算术运算。


    这不适用于花车;它们的表现方式不同。大多数浮点表示在+ 0 / -0两侧都有相等的范围。

答案 2 :(得分:0)

对于C,不能保证你将在具有二进制补码算术硬件的机器上运行(一个比正数更负)。实际上,它可能就是这样。