You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java整数溢出疑问:int最大值二进制与计算逻辑解析

Java int最大值的二进制与数值逻辑解析

核心规则:Java int采用32位补码存储

Java的int是32位有符号整数,遵循补码存储规则:

  • 最高位(从0开始计数的第31位)为符号位:0代表正数,1代表负数
  • 剩余31位(第0位到第30位)是数值位,用于承载具体数值

为什么最大值是「符号位0+其余全1」?

正数的补码与原码完全一致,要得到最大的正数,只需让所有数值位取最大值1,同时符号位保持0(标识正数),对应的二进制就是0111 1111 1111 1111 1111 1111 1111 1111。

数值计算:为什么只算到2^30?

二进制每一位的权重是2的位索引次方:

  • 最右侧的第0位权重是2^0
  • 第1位权重是2^1
  • ...
  • 第30位(最后一个数值位)权重是2^30

所有数值位全1的和是等比数列求和:
2^0 + 2^1 + ... + 2^30 = 2^(30+1) - 1 = 2^31 - 1 = 2147483647
这正是Integer.MAX_VALUE的十进制值。

关于2^31的误解

2^31对应的二进制是1000 0000 0000 0000 0000 0000 0000 0000,但在补码规则里它不代表正数2147483648:

  • 最高位为1,标识这是负数
  • 补码中负数的数值计算规则是:符号位权重为-2^31,其余位取反加1得到原码。这个二进制作为补码,对应原码就是-2147483648,也就是Integer.MIN_VALUE。

总结

Java int的取值范围由32位补码规则直接决定:

  • 最大值:符号位0 + 31位数值位全1,对应十进制2^31 - 1
  • 最小值:符号位1 + 31位数值位全0,对应十进制-2^31

内容的提问来源于stack exchange,提问作者Tholkappiar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:22:19