C语言无符号/有符号整数(stdint.h)

1. 有符号整数(int8_tint16_tint32_tint64_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_t81-128 (-2^7)127 (2^7-1)
int16_t162-32,768 (-2^15)32,767 (2^15-1)
int32_t324-2,147,483,648 (-2^31)2,147,483,647 (2^31-1)
int64_t648-9,223,372,036,854,775
,808 (-2^63)
9,223,372,036,854,775,
807 (2^63-1)

2. 无符号整数(uint8_tuint16_tuint32_tuint64_t

无符号整数(uintX_t)的范围是: 0 到 (2n−1)0 \text{ 到 } \left(2^n – 1\right)0 到 (2n−1)

其中 n 是位宽。

类型位宽字节数最小值 (0)最大值 (UINTX_MAX)
uint8_t810255 (2^8-1)
uint16_t162065,535 (2^16-1)
uint32_t32404,294,967,295 (2^32-1)
uint64_t648018,446,744,073,709,55
1,615 (2^64-1)

3. int 类型的最大最小值

int 的大小是依赖于平台的,可以用 <limits.h> 头文件中的 INT_MININT_MAX 获取:

  • 16 位系统int 是 16 位(2 字节),范围 -32,76832,767
  • 32 位系统int 是 32 位(4 字节),范围 -2,147,483,6482,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_t8-128127
int16_t16-32,76832,767
int32_t32-2,147,483,6482,147,483,647
int64_t64-9,223,372,036,854,775,8089,223,372,036,854,775,807
uint8_t80255
uint16_t16065,535
uint32_t3204,294,967,295
uint64_t64018,446,744,073,709,551,615

如果你需要存储更大的数据:

  • 选择无符号类型(uintX_t,可以比同位宽的有符号类型多存一倍的正整数。
  • 选择更大的位宽(如 int64_t 来存储更大的数字。
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容