short类型取值范围是-32768到32767,因其为16位有符号整数,采用二进制补码表示,最小值为−2¹⁵=−32768,最大值为2¹⁵−1=32767,共65536个值。

short 类型在绝大多数现代平台(包括 C/C++ 和 Java)中固定为 16 位有符号整数,其本质是用二进制补码表示,因此取值范围严格限定在 -32768 到 32767 之间,共可表示 65536 个不同数值。
为什么是 -32768 到 32767?
16 位二进制最多有 2¹⁶ = 65536 种组合。有符号整数将最高位(bit 15)作为符号位:0 表示正数或零,1 表示负数。按补码规则:
- 最小值为 1000 0000 0000 0000₂ = -2¹⁵ = -32768
- 最大值为 0111 1111 1111 1111₂ = 2¹⁵ − 1 = 32767
- 注意:-32768 有对应编码,但 +32768 没有——所以正负不对称
unsigned short 的范围与用途
若显式声明为 unsigned short,则全部 16 位用于数值表达,无符号位:
- 范围变为 0 至 65535(即 2¹⁶ − 1)
- 适合表示非负计数、数组索引、像素灰度值等场景
- 输出时需用
%hu格式符(C/C++),而非%hd
实际编程中要注意的细节
虽然标准要求 short 至少 16 位,但它的“恰好 16 位”在主流环境(x86/x64 Windows/Linux/macOS,32/64 位编译器)中是稳定事实:
- 可用
sizeof(short)验证——结果恒为 2 - 极限值定义在
<limits.h></limits.h>(C)或Short.MIN_VALUE / MAX_VALUE(Java)中 - 溢出不报错:32767 + 1 → -32768;0 − 1 → 32767(循环行为)
- 跨平台安全建议:优先使用
int16_t(C99)或short(Java),避免依赖裸short在极端嵌入式平台上的可能变异
和其它整型的直观对比
理解 short 的定位,关键看它在整数家族中的“轻量级”角色:
-
char(8 位):适合单字节字符或小状态标记 -
short(16 位):平衡内存与范围,适合音频采样、小尺寸坐标、紧凑结构体字段 -
int(通常 32 位):通用默认整型,运算效率高 -
long或long long:大数或文件偏移等场景











