首页 > 解决方案 > 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;
}

标签: c

解决方案


当您使用说明%u符时,printf您是在告诉它期待一个int,它在您的系统上显然是 32 位的。因此,-1由于系统上的32 位 int0xffffffff.

然后将其打印为无符号整数,为您提供您所看到的结果。

如评论中所述,将说明%u符替换为%hhu以避免将您的 8 位有符号值提升为 32 位有符号值。

有关 C printf 说明符的列表,请参阅cplusplus.com 上的此页面

说明%h符指示 ashort int是 16 位。说明%hh符指示一个 short int或只是char一个字节。


推荐阅读