-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位int由0xffffffff表示
然后,它将其打印为无符号整数,给出您看到的结果
如注释中所述,将%u说明符替换为%hhu,以避免将8位有符号值提升为32位有符号值
有关C printf说明符的列表,请参阅cplusplus.com上的此页
%h说明符表示16位的短int。%hh说明符表示一个shortshort int或只是char,它是一个单字节