c语言%hhu,%hu等含义区别

在C语言中,`%hhu` 和 `%hu` 是格式化输入输出函数(如 `printf` 和 `scanf`)中用于格式化无符号整数的占位符。它们的区别在于它们所对应的数据类型和存储大小。

1. `%hhu`
   含义:用于格式化 `unsigned char` 类型的数据。
   数据类型:`unsigned char`
   存储大小:通常为 1 字节(8 位),取值范围是 `0` 到 `255`。
   使用场景:
     当你需要格式化输出或输入一个 `unsigned char` 类型的变量时。
     例如:

 unsigned char score = 90;
       printf("成绩:%hhu\n", score); // 输出:成绩:90

   

 2. `%hu`
 含义:用于格式化 `unsigned short` 类型的数据。
 数据类型:`unsigned short`
 存储大小:通常为 2 字节(16 位),取值范围是 `0` 到 `65535`。
 使用场景:

当你需要格式化输出或输入一个 `unsigned short` 类型的变量时。
例如:
unsigned short total = 50000;
printf("总成绩:%hu\n", total); // 输出:总成绩:50000
 

 3. 其他相关占位符
`%u`:
用于格式化 `unsigned int` 类型的数据。
存储大小:通常为 4 字节(32 位),取值范围是 `0` 到 `4294967295`。
 例如:
       unsigned int population = 1000000;
       printf("人口:%u\n", population); // 输出:人口:1000000

`%lu`:
用于格式化 `unsigned long` 类型的数据。
存储大小:通常为 4 字节或 8 字节(32 位或 64 位),取值范围更大。
例如:
       unsigned long bigNumber = 1234567890UL;
       printf("大数:%lu\n", bigNumber); // 输出:大数:1234567890

`%llu`:
用于格式化 `unsigned long long` 类型的数据。
存储大小:通常为 8 字节(64 位),取值范围更大。
例如:
       unsigned long long hugeNumber = 1234567890123456789ULL;
       printf("超大数:%llu\n", hugeNumber); // 输出:超大数:1234567890123456789

 4. 总结对比

占位符数据类型存储大小取值范围  使用场景
`%hhu`unsigned char1 字节`0` 到 `255` 格式化 `unsigned char` 数据
`%hu``unsigned short`2 字节`0` 到 `65535`格式化 `unsigned short` 数据
`%u` `unsigned int` 4 字节 `0` 到 `4294967295`格式化 `unsigned int` 数据
`%lu``unsigned long`4/8 字节取决于平台格式化 `unsigned long` 数据
`%llu``unsigned long long`8 字节`0` 到 `18446744073709551615`格式化 `unsigned long long` 数据

 

 5. 注意事项
类型匹配:在使用格式化输入输出时,确保占位符与变量的类型匹配,否则会导致未定义行为。
例如,如果变量是 `unsigned char`,但使用 `%u` 格式化,可能会导致错误。
平台差异:`unsigned long` 的大小可能因平台而异(32 位或 64 位),因此在使用 `%lu` 时需要注意平台兼容性。

示例代码

以下是一个完整的示例,展示如何使用这些占位符:

#include <stdio.h>

int main() {
    unsigned char score = 90;
    unsigned short total = 50000;
    unsigned int population = 1000000;
    unsigned long bigNumber = 1234567890UL;
    unsigned long long hugeNumber = 1234567890123456789ULL;

    printf("成绩:%hhu\n", score);          // 输出:成绩:90
    printf("总成绩:%hu\n", total);         // 输出:总成绩:50000
    printf("人口:%u\n", population);       // 输出:人口:1000000
    printf("大数:%lu\n", bigNumber);       // 输出:大数:1234567890
    printf("超大数:%llu\n", hugeNumber);   // 输出:超大数:1234567890123456789

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值