c - 1byte 变量上的 printf flag '%u' 将其视为 4bytes 全为
问题描述
1byte 变量中的 -1 现在是 1111 1111,当我尝试将它作为无符号整数打印时,我希望它是 255,但它如何处理它,就好像它是 4bytes 都包含“0xff ff ff ff”这是 2 到 32 减 1 。这是为什么?为什么它将剩余的 3 个字节假定为所有字节?
#include "stdio.h"
int main ( ) {
char g = -1;
printf ( "g is %u \n" , g );
return 0;
}
解决方案
当您使用说明%u
符时,printf
您是在告诉它期待一个int
,它在您的系统上显然是 32 位的。因此,-1
由于系统上的32 位 int由0xffffffff
.
然后将其打印为无符号整数,为您提供您所看到的结果。
如评论中所述,将说明%u
符替换为%hhu
以避免将您的 8 位有符号值提升为 32 位有符号值。
有关 C printf 说明符的列表,请参阅cplusplus.com 上的此页面。
说明%h
符指示 ashort int
是 16 位。说明%hh
符指示一个短 short int
或只是char
一个字节。
推荐阅读
- ms-access - 如何解决导出到 Excel 错误?
- python - 获取 ValueError:int() 以 10 为底的无效文字:''
- c++ - 使用离散二次插值查找最大值的 (x,y) 子像素坐标
- swift - 如果使用 `freeWhenDone:false` 初始化,Data 的“复制构造函数”是否会复制其引用的字节?
- php - 试图与我的 docker consul 中的外部 ip 通信
- php - 如何获取特定行的总和
- mysql - 使用 Mysql 获取记录的 LoopBack 4 REST API 示例
- hadoop - 如何使用 apache nifi 将多个 json 文件加载到具有正确映射的多个配置单元表中?
- python - 我可以将小图像(13x12)随机添加到像素数组(与我的小图像大小相同的随机像素)吗
- python - 如何在 python 的 sklearn 中使用 gridsearchcv 执行特征选择