C 教程

C 教程 C 语言简介 C 下载安装和环境配置 C 快速入门 C 语法 C 输出 C 注释 C 变量 C 数据类型 C 常量 C 运算符 C 布尔值 C If...Else 语句 C Switch 语句 C While 循环 C For 循环 C Break/Continue 语句 C 数组 C 字符串 C 用户输入 C 内存地址 C 指针

C 函数

C 函数 C 函数参数 C 作用域 C 函数声明 C 递归 C 数学函数

C 文件

C 创建文件 C 写入文件 C 读取文件

C 结构体

C 结构体 C 嵌套结构体 C 结构体和指针 C 联合体 C typedef

C 枚举

C 枚举

C 内存

C 内存管理

C 错误

C 错误 C 调试 C 空值 C 错误处理 C 输入验证

C 更多

C 日期 C 随机数 C 宏 C 代码组织 C 存储类 C 位运算符 C 固定宽度整数

C 项目

C 项目

C 参考资料

C 参考资料 C 关键词 C <stdio.h> C <stdlib.h> C <string.h> C <math.h> C <ctype.h> C <time.h>

C 标准库参考

C 标准库 - 参考手册 C 标准库 - <assert.h> C 标准库 - <ctype.h> C 标准库 - <errno.h> C 标准库 - <float.h> C 标准库 - <limits.h> C 标准库 - <locale.h> C 标准库 - <math.h> C 标准库 - <setjmp.h> C 标准库 - <signal.h> C 标准库 - <stdarg.h> C 标准库 - <stddef.h> C 标准库 - <stdio.h> C 标准库 - <stdlib.h> C 标准库 - <string.h> C 标准库 - <time.h>

C 实例

C 语言实例 C 经典100例 C 编译器 C 测验


C 固定宽度整数

固定宽度整数

在 C 语言中,int、short 和 long 类型的大小会因计算机和系统而异。例​​如,一个 int 在某些系统上可能占用 2 个字节,而在另一个系统上则可能占用 4 个字节。

为了确保程序在所有计算机上的行为一致,C 语言在 <stdint.h> 头文件中提供了 固定宽度整数类型。无论在哪台计算机上,这些类型始终具有相同的大小(位数)。

最常见的固定宽度类型有:

类型 尺寸 范围 Printf 说明符
int8_t 8 bits (1 byte) -128 to 127 %d
uint8_t 8 bits (1 byte) 0 to 255 %u
int16_t 16 bits (2 bytes) -32,768 to 32,767 %d
uint16_t 16 bits (2 bytes) 0 to 65,535 %u
int32_t 32 bits (4 bytes) -2,147,483,648 to 2,147,483,647 %d
uint32_t 32 bits (4 bytes) 0 to 4,294,967,295 %u
int64_t 64 bits (8 bytes) -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 %lld
uint64_t 64 bits (8 bytes) 0 to 18,446,744,073,709,551,615 %llu

字母 u 代表 无符号,这意味着该类型只能存储 非负值(0 及以上)。与有符号类型相比,这使得最大正值翻倍,但您失去了存储负数的能力。


使用定宽整数

示例


#include <stdio.h>
#include <stdint.h>  // 需要用于固定宽度整数

int main() {
  int8_t a = 100;        // 8-bit integer
  int16_t b = 30000;     // 16-bit integer
  int32_t c = 2000000;   // 32-bit integer
  int64_t d = 9000000000; // 64-bit integer

  printf("%d
", a);
  printf("%d
", b);
  printf("%d
", c);
  printf("%lld
", d); // use %lld for 64-bit
  return 0;
}

亲自试一试 »


何时使用等宽整数?

对于大多数日常程序来说,你不需要这些类型——普通的 int 通常就足够了。

但在以下情况下,等宽整数是必不可少的:

  • 您正在编写嵌入式系统(用于小型设备,例如微控制器的程序)。
  • 您正在处理文件格式,并且对文件大小的精确性要求很高。
  • 您正在通过网络发送数据,并且需要在不同的机器上获得一致的结果。

实际应用示例

假设你要编写一个程序来显示设备的电池电量。由于电池百分比始终介于 0 到 100 之间,因此你不需要像 int 这样的大类型。你可以使用 uint8_t,它正好占用 1 个字节(8 位),可以存储 0 到 255 之间的值:

示例


#include <stdio.h>
#include <stdint.h>

int main() {
  uint8_t battery = 87; // 电池电量百分比

  printf("Battery level is %u out of 100
", battery);

  return 0;
}

亲自试一试 »

这里我们使用uint8_t来节省内存,它非常适合存储范围较小且定义明确的值,例如电池百分比。