short取值范围为-32768~32767,因其采用16位补码表示:最高位为符号位,剩余15位决定数值,故最大正数为2¹⁵−1=32767,最小负数为−2¹⁵=−32768;溢出时发生确定性回绕而非报错。

short 类型的取值范围不是随意设定的,而是由其底层存储空间和编码方式共同决定的——它直接约束你能安全存什么、怎么算、以及越界后会发生什么。
short 为什么是 -32768 到 32767
标准 short 通常占 2 个字节(16 位),采用补码表示有符号整数。其中最高位是符号位,剩下 15 位用于数值表达。因此最大正数是 215−1 = 32767,最小负数是 −215 = −32768。这个范围是硬件与 C/C++ 标准共同约定的结果,不是经验值,而是可推导的确定边界。
超出范围的后果很明确
一旦赋值超过这个区间,行为就不再是“报错”,而是发生**回绕(wrap-around)**:
- 32767 + 1 → 变成 -32768
- -32768 - 1 → 变成 32767
- 这种结果在大多数编译器中是确定的(符合 ISO C 标准的有定义行为),但逻辑上已失真
实际使用中的关键限制
short 的适用场景受限于它的容量,不是“能用就用”,而要看数据是否真在范围内且后续运算不溢出:
- 适合计数器、数组索引(当确定元素数
- 避免用于累加、乘法或输入未校验的用户数据——哪怕初始值合法,运算过程也可能越界
- 跨平台开发时需注意:C 标准只要求 short ≥ 16 位,某些嵌入式平台可能更大,但 -32768 ~ 32767 是最常见且可移植的保证范围
和其它整型的配合逻辑
short 不是孤立存在的,它的意义常在类型协作中体现:
- 比 int 小,省内存,但在现代 CPU 上未必更快;性能优势主要体现在大规模数组或结构体内存布局优化中
- 和 unsigned short 配合使用时,范围变为 0 ~ 65535,适用于纯非负且需紧凑存储的场景(如像素灰度值)
- 函数参数或返回值中若声明为 short,调用方需确保传入值落在范围内,否则行为不可靠











