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
暂无评论内容