目录
1、整型
在C语言的数据类型中整型包含了4种,分别是:short、int、long int、long long int,他们主要的区别在于能表示的数据范围不同。
1.1 short类型
-
存储大小
-
通常占用 2字节(16位)。
-
在所有系统中大小固定。
-
-
取值范围
-
有符号:-32,768 到 32,767。
-
无符号:0 到 65,535。
-
-
使用场景
-
适合存储小范围整数。
-
常用于节省内存的场景(如嵌入式系统)。
-
-
示例
short temperature = -273; // 温度值
unsigned short counter = 65535; // 计数器
1.2 int类型
-
存储大小
-
通常占用 4字节(32位)。
-
在大多数现代系统中大小固定。
-
-
取值范围
-
有符号:-2,147,483,648 到 2,147,483,647。
-
无符号:0 到 4,294,967,295。
-
-
使用场景
-
默认的整数类型,适合大多数通用场景。
-
性能最佳,通常与CPU字长匹配。
-
示例
int score = 100; // 分数
unsigned int population = 1000000; // 人口数量
1.3 long类型
-
存储大小:
-
在32位系统中通常为 4字节(32位)。
-
在64位系统中通常为 8字节(64位)。
-
-
取值范围:
-
32位系统:
-
有符号:-2,147,483,648 到 2,147,483,647。
-
无符号:0 到 4,294,967,295。
-
-
64位系统:
-
有符号:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
-
无符号:0 到 18,446,744,073,709,551,615。
-
-
-
使用场景:
-
需要更大范围整数时使用。
-
常用于时间戳、文件大小等场景。
-
-
示例:
long timestamp = 1633072800L; // 时间戳 unsigned long fileSize = 4294967295UL; // 文件大小
1.4 long long类型
-
存储大小:
-
通常占用 8字节(64位)。
-
在所有系统中大小固定。
-
-
取值范围:
-
有符号:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
-
无符号:0 到 18,446,744,073,709,551,615。
-
-
使用场景:
-
需要极大范围整数时使用。
-
适合大数计算、高精度时间戳等场景。
-
-
示例:
long long bigNumber = 9223372036854775807LL; // 极大整数
unsigned long long hugeNumber = 18446744073709551615ULL; // 极大无符号整数
1.5. 对比分析
1.5.1 存储大小对比
类型 | 32位系统大小 | 64位系统大小 | 备注 |
---|---|---|---|
short | 2字节 | 2字节 | 固定大小 |
int | 4字节 | 4字节 | 通常与CPU字长匹配 |
long | 4字节 | 8字节 | 大小依赖系统 |
long long | 8字节 | 8字节 | 固定大小 |
1.5.2 取值范围对比
有符号类型
类型 | 32位系统范围 | 64位系统范围 |
---|---|---|
short | -32,768 到 32,767 | -32,768 到 32,767 |
int | -2^31 到 2^31-1 | -2^31 到 2^31-1 |
long | -2^31 到 2^31-1 | -2^63 到 2^63-1 |
long long | -2^63 到 2^63-1 | -2^63 到 2^63-1 |
无符号类型
类型 | 32位系统范围 | 64位系统范围 |
---|---|---|
unsigned short | 0 到 65,535 | 0 到 65,535 |
unsigned int | 0 到 2^32-1 | 0 到 2^32-1 |
unsigned long | 0 到 2^32-1 | 0 到 2^64-1 |
unsigned long long | 0 到 2^64-1 | 0 到 2^64-1 |
1.5.3 代码示例对比
#include <stdio.h>
#include <limits.h>
int main() {
short s = 32767; // short最大值
int i = 2147483647; // int最大值
long l = 2147483647L; // long最大值(32位系统)
long long ll = 9223372036854775807LL; // long long最大值
printf("short size: %zu bytes, range: %hd to %hd\n", sizeof(short), SHRT_MIN, SHRT_MAX);
printf("int size: %zu bytes, range: %d to %d\n", sizeof(int), INT_MIN, INT_MAX);
printf("long size: %zu bytes, range: %ld to %ld\n", sizeof(long), LONG_MIN, LONG_MAX);
printf("long long size: %zu bytes, range: %lld to %lld\n", sizeof(long long), LLONG_MIN, LLONG_MAX);
return 0;
}
结果如下: