【问题标题】:Why is the minimum value for an int in java -2^31 and not -2^31-1为什么java中int的最小值是-2^31而不是-2^31-1
【发布时间】:2020-09-09 18:02:47
【问题描述】:

在 java 中,我知道 int 的大小是 32 位。 Java 不支持无符号值,因此使用一位来保存有关 int 是负数还是正数的信息。所以剩下的 31 位保存数字的值。可以达到的最高 31 位是 (2^31)-1,这是 java 中 t 可以保持的最高值,但为什么它可以一直下降到 -2^31 而不是 -2^31-1。

【问题讨论】:

标签: java integer primitive primitive-types


【解决方案1】:

这与 Java 没有什么特别的关系,它是所有计算如何用 32 位表示整数的方式。但要回答这个问题:在 2^32 个可能的值中,有一半(2^31 个)用于表示非负值,包括0。所以有 2^31 - 1 个值来表示正数,所以最高的是 2^31 - 1。

另一半——2^31——都是用来表示负数的,所以一直到-2^31。

【讨论】:

  • 所以你是说 0 只存储在带正号的数字上,所以如果我输入 -0 它将被存储为零并且签名位将设置为 +,这会留下一个额外的数字对于消极的一面。因此,对于假设我们有 -2 的每个负数,它将以二进制形式保存为 01 并且第 32 位设置为负数,因为它是负数,所以要考虑 1 的差异?
  • -2 没有以二进制形式保存为 01,它实际上存储为(截断为 8 位)11111110,但是是的。
  • 好的,所以我从您的回复中得到的是,这 32 位可以表示 2^32 个数字。如果你把它一分为二,你会得到 2^31。因此,使用这 32 位,您可以表示 2^31 个负和正值,但这会留下零,这意味着零占据了正数之一的位置。所以现在我的问题是,对于一个有符号整数,1 基数 10 将在计算机中表示为 01 基数 2 或 100000000000000000000000000000001 基数 2 或其他东西。你说存储为 11111110,怎么办?
  • 1 表示为 00...001。 -2 表示为 11..110。你可以了解更多here
  • 我检查了两个的补码,它解释了一切。非常感谢
猜你喜欢
  • 2023-03-21
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多