1. 有符号整数(int8_t、int16_t、int32_t、int64_t)
有符号整数(intX_t)使用二进制补码存储,范围是: −(2(n−1)) 到 (2(n−1)−1)-\left(2^{(n-1)}\right) \text{ 到 } \left(2^{(n-1)} – 1\right)−(2(n−1)) 到 (2(n−1)−1)
其中 n 是位宽。
| 类型 | 位宽 | 字节数 | 最小值 (INTX_MIN) | 最大值 (INTX_MAX) |
|---|---|---|---|---|
int8_t | 8 | 1 | -128 (-2^7) | 127 (2^7-1) |
int16_t | 16 | 2 | -32,768 (-2^15) | 32,767 (2^15-1) |
int32_t | 32 | 4 | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31-1) |
int64_t | 64 | 8 | -9,223,372,036,854,775 ,808 ( -2^63) | 9,223,372,036,854,775, 807 ( 2^63-1) |
2. 无符号整数(uint8_t、uint16_t、uint32_t、uint64_t)
无符号整数(uintX_t)的范围是: 0 到 (2n−1)0 \text{ 到 } \left(2^n – 1\right)0 到 (2n−1)
其中 n 是位宽。
| 类型 | 位宽 | 字节数 | 最小值 (0) | 最大值 (UINTX_MAX) |
|---|---|---|---|---|
uint8_t | 8 | 1 | 0 | 255 (2^8-1) |
uint16_t | 16 | 2 | 0 | 65,535 (2^16-1) |
uint32_t | 32 | 4 | 0 | 4,294,967,295 (2^32-1) |
uint64_t | 64 | 8 | 0 | 18,446,744,073,709,55 1,615 ( 2^64-1) |
3. int 类型的最大最小值
int 的大小是依赖于平台的,可以用 <limits.h> 头文件中的 INT_MIN 和 INT_MAX 获取:
- 16 位系统:
int是 16 位(2 字节),范围-32,768到32,767 - 32 位系统:
int是 32 位(4 字节),范围-2,147,483,648到2,147,483,647 - 64 位系统(部分情况):
int可能仍然是 32 位,但在某些编译器下可能扩展到 64 位
示例:
c复制编辑#include <stdio.h>
#include <limits.h>
int main() {
printf("int 最小值: %d\n", INT_MIN);
printf("int 最大值: %d\n", INT_MAX);
return 0;
}
4. 代码测试不同整数类型的最大最小值
c复制编辑#include <stdio.h>
#include <stdint.h>
#include <limits.h>
int main() {
printf("int8_t 最小值: %d\n", INT8_MIN);
printf("int8_t 最大值: %d\n", INT8_MAX);
printf("int16_t 最小值: %d\n", INT16_MIN);
printf("int16_t 最大值: %d\n", INT16_MAX);
printf("int32_t 最小值: %d\n", INT32_MIN);
printf("int32_t 最大值: %d\n", INT32_MAX);
printf("int64_t 最小值: %lld\n", (long long)INT64_MIN);
printf("int64_t 最大值: %lld\n", (long long)INT64_MAX);
printf("uint8_t 最大值: %u\n", UINT8_MAX);
printf("uint16_t 最大值: %u\n", UINT16_MAX);
printf("uint32_t 最大值: %u\n", UINT32_MAX);
printf("uint64_t 最大值: %llu\n", (unsigned long long)UINT64_MAX);
return 0;
}
5. 总结
| 类型 | 位宽 | 最小值 | 最大值 |
|---|---|---|---|
int8_t | 8 | -128 | 127 |
int16_t | 16 | -32,768 | 32,767 |
int32_t | 32 | -2,147,483,648 | 2,147,483,647 |
int64_t | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
uint8_t | 8 | 0 | 255 |
uint16_t | 16 | 0 | 65,535 |
uint32_t | 32 | 0 | 4,294,967,295 |
uint64_t | 64 | 0 | 18,446,744,073,709,551,615 |
如果你需要存储更大的数据:
- 选择无符号类型(
uintX_t),可以比同位宽的有符号类型多存一倍的正整数。 - 选择更大的位宽(如
int64_t) 来存储更大的数字。
THE END






暂无评论内容