byte、short、int、long的取值范围分别为-128~127、-32768~32767、-2147483648~2147483647、-9223372036854775808~9223372036854775807,由其位数n决定,公式为-2ⁿ⁻¹~2ⁿ⁻¹-1。

掌握 byte、short、int、long 的取值范围,关键在于理解它们各自占用的字节数、是否带符号,以及二进制补码表示法的规则。Java(及多数主流语言)中这些整型都是有符号类型,最高位是符号位,所以实际可用位数比总位数少 1 位。
先记住基本字节和位数
这是所有计算的基础:
- byte:1 字节 = 8 位 → 可表示 2⁸ = 256 个不同值
- short:2 字节 = 16 位 → 2¹⁶ = 65536 个值
- int:4 字节 = 32 位 → 2³² ≈ 42.9 亿个值
- long:8 字节 = 64 位 → 2⁶⁴ 是个极大数(约 1.8 × 10¹⁹)
有符号数的取值范围公式
因为是**有符号补码表示**,正数从 0 开始,负数从 -1 向下延伸,所以范围是:
-2n-1 ~ (2n-1 - 1),其中 n 是总位数。
代入即可快速算出:
- byte(n=8):-2⁷ ~ 2⁷−1 → -128 ~ 127
- short(n=16):-2¹⁵ ~ 2¹⁵−1 → -32768 ~ 32767
- int(n=32):-2³¹ ~ 2³¹−1 → -2147483648 ~ 2147483647
- long(n=64):-2⁶³ ~ 2⁶³−1 → -9223372036854775808 ~ 9223372036854775807
为什么不是从 -127 到 +127?
补码设计让 0 只有一种表示(全 0),且负数多占一个数:最小值是 -2n-1,而最大值是 2n-1−1。比如 byte 中:
- 00000000 = 0
- 01111111 = 127(最大正数)
- 10000000 = -128(最小负数,不是 -0)
- 11111111 = -1
这样设计使加减运算电路更简洁,也避免了 +0 和 -0 的歧义。
实用技巧:用代码或常量验证
不必死记硬背,开发中可直接查语言内置常量:
- Java 中:
Byte.MIN_VALUE/Byte.MAX_VALUE,其他类型同理 - 在 IDE 里输入
Integer.按自动补全,立刻看到MAX_VALUE和MIN_VALUE - 终端里用 Python 快速验算:
print(-2**31, 2**31-1)→ -2147483648 2147483647
理解原理 + 熟悉工具,比纯记忆更可靠、更不易错。










