在此引用它作为参考:
#include
int main(void){
int l;
short s;
char c;
l = 0xdeadbeef;
s = l;
c = l;
printf("l = 0x%x (%d bits)\n", l, sizeof(l) * 8);
printf("s = 0x%x (%d bits)\n", s, sizeof(s) * 8);
printf("c = 0x%x (%d bits)\n", c, sizeof(c) * 8);
return 0;
}
我在我的机器上的输出是: -
l = 0xdeadbeef (32 bits)
s = 0xffffbeef (16 bits)
c = 0xffffffef (8 bits)
以下是我的理解: -
赋值s = l,c = l将导致s和c被提升为整数,它们将分别具有l的最后16位(0xbeef)和最后8位(0xef) .
Printf尝试将上述每个值(l,s和c)解释为无符号整数(因为%x作为格式说明符传递) . 从输出中我看到符号扩展已经发生 . 我怀疑是因为%x代表unsigned int,为什么在打印s和c时会发生符号扩展? s的输出不应该是0x0000beef而c的输出应该是0x000000ef吗?