【问题标题】:Why has the int32 type a maximum value of 2³¹ − 1? [duplicate]为什么 int32 类型的最大值为 2³¹ − 1? [复制]
【发布时间】:2011-04-19 02:36:38
【问题描述】:

可能重复:
What is "2's Complement"?

我知道 int32 的长度为 32 位(4 字节)。我假设它有 2³² 值,但由于其中一半必须低于零,我想这与此有关。 我想知道为什么 int32 有最大值。正数 2³¹ − 1.

【问题讨论】:

标签: c# types integer


【解决方案1】:

这个最高位用于编码符号(1 表示负数),因此只有 31 位可用于实际值。

Int32.MaxValue =  2^31 - 1 = 01111111111111111111111111111111
                  1        = 00000000000000000000000000000001
                  0        = 00000000000000000000000000000000
                 -1        = 11111111111111111111111111111111
Int32.MinValue = -2^31     = 10000000000000000000000000000000

【讨论】:

  • 如果我们将 0 视为正数(假设),那么除了 -1 和 0 之间的假想线之外,我们还有相等数量的值。
【解决方案2】:

2³² 可能的值

− 2³¹ 值用于negative integers

- 1 个用于零的值

= 2³¹ − 1 个可用于正整数的值

【讨论】:

    【解决方案3】:

    2³² 约为 42 亿。这是 32 位二进制数(32 位数字)可以表示的最大 VALUES 数。

    这些值可以是任何范围内的任何值。在一个 UNSIGNED 32 位数字中,有效值是从 0 到 2³² − 1(而不是 1 到 2³²,但 VALUES 的个数相同,约为 42 亿)。

    在带符号的 32 位数字中,32 位中的一个用于指示该数字是否为负数。这将值的数量减少了 2¹ 或一半。剩下 2³¹,大约是 21 亿。这意味着该范围现在约为 -21 亿至 21 亿。相同数量的值,不同的范围。

    【讨论】:

    • 这是一个被高度低估的答案,应该是最受好评的。
    【解决方案4】:

    您有 2^31 个值低于零(最小值 = -2^31)、2^31-1 个值高于零和零本身。这使得 2^31 + 2^31-1 + 1 = 2*2^31 = 2^32 值:) ...

    另一种解释涉及负数的表示方式(使用二补码):很快,最高有效位表示负数,因此您还剩下 2^31 个正数(包括零),这给出了我们的范围 0..2^31-1

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多