C语言定义了几种整数类型:短整型(short)、整型(int)、长整型(long)、更长的整型(long long)。这些类型可以被 signed 和 unsigned 修饰。
计算机中的最小存储单位是 bit(位),1字节(byte)= 8位(bit)。
类型 | 修饰符 | 占用空间 | 取值范围 |
---|---|---|---|
short [int] | signed | 2字节(=16位) | -32768 ~ 32767 (- 2 15 2^{15} 215 ~ 2 15 2^{15} 215-1) |
short [int] | unsigned | 2字节(=16位) | 0 ~ 65535 (0 ~ 2 16 2^{16} 216-1) |
int | signed | 通常4字节 | -2147483648 ~ 2147483647 (- 2 31 2^{31} 231 ~ 2 31 2^{31} 231-1) |
int | unsigned | 通常4字节 | 0 ~ 4294967295 (0 ~ 2 32 2^{32} 232-1) |
long [int] | signed | 4字节或8字节 | 4字节时:-2147483648 ~ 2147483647 (- 2 31 2^{31} 231 ~ 2 31 2^{31} 231-1) |
long [int] | unsigned | 4字节或8字节 | 4字节时:-0 ~ 4294967295 (0 ~ 2 32 2^{32} 232-1) |
long long | signed | 8字节(=64位) | -9223372036854775808~ 9223372036854775807(- 2 63 2^{63} 263 ~ 2 63 2^{63} 263-1) |
long long | unsigned | 8字节(=64位) | 0 ~ 18446744073709551615(0 ~ 2 64 2^{64} 264-1) |
signed int m; // 等同于 int m;
unsigned int a;
short a;
long b;
long long c;
long x = 123L; // 或者写成 123l
long long y = 123LL;
unsigned int z = 123U;
unsigned long int w = 1234UL;
#include <limits.h>
int main() {
printf("%d\n", INT_MIN ); // -2147483648
printf("%d\n", INT_MAX ); // 2147483647
return 0;
}
#include <stdint.h>
int main() {
int32_t x32 = 45933945; // int32_t 类型,保证32位宽度。
printf("x32 = %d\n", x32);
return 0;
}
C语言的整数类型有着丰富的表达形式,各种类型和修饰符可以满足不同的需求。通过了解不同类型的取值范围和内存占用情况,我们能够更有效地利用整数类型。同时,精确宽度类型的使用可以增强代码的可移植性。