1byte变量上的printf标志“%u”将其视为4bytes all-one

-1字节变量中的1是1111111
现在,当我尝试打印它时,就好像它是一个无符号整数
我估计是255
但有些人认为它是如何处理的,就好像它是4个字节,所有的字节都包含一个“1”字;0xff ff ff"
这是32减去1的2。
为什么呢?
为什么它假设剩下的3个字节都是1

“包括”;stdio.h“;
int main(){
charg=-1;
printf(g是%u\n,g);
返回0;
}

当您将%u说明符与printf一起使用时,您告诉它需要int,在您的系统上显然是32位。因此,-1作为系统上的32位int0xffffffff表示

然后,它将其打印为无符号整数,给出您看到的结果

如注释中所述,将%u说明符替换为%hhu,以避免将8位有符号值提升为32位有符号值

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

%h说明符表示16位的短int%hh说明符表示一个shortshort int或只是char,它是一个单字节

发表评论