short int 是什么?
short int(通常简写为 short)是 C 语言中的一种基本数据类型,用于表示整数,它的核心特点是,与标准的 int 类型相比,它占用的内存空间通常更小,因此它能表示的数值范围也更小。

(图片来源网络,侵删)
这种设计的主要目的是为了节省内存,尤其是在内存资源非常有限的嵌入式系统或处理大量数据时。
关键特性
a. 内存大小
short int 的大小在不同编译器和操作系统上可能有所不同,但遵循一个基本原则:
sizeof(short) <= sizeof(int)
这意味着 short 的字节数绝对不会比 int 多。
-
在绝大多数现代系统(如 Windows, Linux, macOS)上:
(图片来源网络,侵删)sizeof(short int)是 2 字节(16 位)。sizeof(int)通常是 4 字节(32 位)。
-
在一些非常古老的系统上:
sizeof(short int)和sizeof(int)可能都是 2 字节。
你可以使用 sizeof 运算符在你的特定环境中检查它的大小:
#include <stdio.h>
int main() {
printf("The size of short int is: %zu bytes\n", sizeof(short int));
printf("The size of int is: %zu bytes\n", sizeof(int));
return 0;
}
输出示例 (在 64 位系统上):
The size of short int is: 2 bytes
The size of int is: 4 bytes
b. 数值范围
数值范围由两个因素决定:大小(字节数)和符号(是否为有符号数)。

(图片来源网络,侵删)
有符号 short int (默认)
这是最常见的 short int 形式,它可以表示正数、负数和零。
- 大小: 2 字节 = 16 位。
- 范围: -32,768 到 32,767。
计算方法:
- 最高位是符号位(0 为正,1 为负)。
- 正数的最大值:
2^(16-1) - 1 = 2^15 - 1 = 32767。 - 负数的最小值:
-2^(16-1) = -32768。
无符号 short int (使用 unsigned short)
如果你确定只需要存储非负数,可以使用 unsigned short int(通常简写为 unsigned short)。
- 大小: 2 字节 = 16 位。
- 范围: 0 到 65,535。
计算方法:
- 所有位都用来表示数值。
- 最大值:
2^16 - 1 = 65535。
如何使用 short int?
a. 声明变量
// 声明一个有符号的 short int 变量 short int myShortVar; // 或者更常见的简写形式 short myShortVar; // 声明一个无符号的 short int 变量 unsigned short int myUnsignedShortVar; // 或者更常见的简写形式 unsigned short myUnsignedShortVar; // 声明并初始化 short age = 150; unsigned short item_count = 5000;
b. 使用示例
下面的代码演示了 short int 的基本用法,包括赋值、打印和检查其范围。
#include <stdio.h>
#include <limits.h> // 这个头文件定义了各种数据类型的极限值
int main() {
// 1. 声明和初始化
short signed_number = 12345;
short negative_number = -12345;
unsigned short unsigned_number = 50000;
// 2. 打印变量值
printf("Signed short: %d\n", signed_number);
printf("Negative short: %d\n", negative_number);
printf("Unsigned short: %u\n", unsigned_number); // 注意:打印无符号数用 %u
// 3. 检查极限值
printf("Maximum value of a signed short: %d\n", SHRT_MAX); // 来自 limits.h
printf("Minimum value of a signed short: %d\n", SHRT_MIN); // 来自 limits.h
printf("Maximum value of an unsigned short: %u\n", USHRT_MAX); // 来自 limits.h
// 4. 演示溢出
short max_val = SHRT_MAX; // 32767
printf("Before overflow: %d\n", max_val);
max_val = max_val + 1; // 32768
printf("After overflow: %d\n", max_val); // 结果会变成 -32868 (环绕)
return 0;
}
输出:
Signed short: 12345
Negative short: -12345
Unsigned short: 50000
Maximum value of a signed short: 32767
Minimum value of a signed short: -32768
Maximum value of an unsigned short: 65535
Before overflow: 32767
After overflow: -32768 // 注意:这里发生了“环绕”,从最大值跳到了最小值
short int vs. int
| 特性 | short int |
int |
|---|---|---|
| 目的 | 节省内存,用于小范围整数 | 通用整数类型 |
| 典型大小 | 2 字节 (16 位) | 4 字节 (32 位) |
| 典型有符号范围 | -32,768 到 32,767 | -2,147,483,648 到 2,147,483,647 |
| 典型无符号范围 | 0 到 65,535 | 0 到 4,294,967,295 |
| 使用场景 | 嵌入式系统、数组、内存敏感的应用 | 通用编程、循环计数器、大多数整数运算 |
何时应该使用 short int?
- 内存是首要考虑因素:当你在内存极其受限的设备(如 8 位或 16 位微控制器)上编程时,使用
short可以节省大量内存。 - 处理大量小数值数据:如果你需要存储成千上万个在
short范围内的整数(一个大型数组来存储传感器读数),使用short可以显著减少内存占用,并可能提高缓存命中率,从而提升性能。 - 与硬件或外部接口交互:某些硬件寄存器或网络协议定义的数据结构就是 16 位(2 字节)的,此时使用
short是最自然和最安全的选择。
何时应该避免使用 short int?
- 现代桌面/服务器应用:在这些环境中,内存通常非常充足,使用
int的性能通常与short一样好(甚至更好,因为 32 位整数在现代 CPU 上是原生操作的),int的范围更大,不易出错。 - 性能关键路径:虽然
short节省了内存,但在某些架构上,使用比机器字长(word size,通常是 32 或 64 位)更小的类型进行算术运算时,可能需要额外的指令(符号扩展),有时反而比使用int慢,不要为了“优化”而盲目使用short。
short int 是 C 语言中一个有用的工具,用于在特定场景下优化内存使用,理解它的大小、范围以及与 int 的区别是编写高效、可移植 C 代码的关键,在现代通用编程中,int 通常是更安全、更自然的选择,但在嵌入式和内存敏感的应用中,short 仍然扮演着不可或缺的角色。
