int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出为:fffffff7
。 我的机器是little-endian。当然我知道*b
等于0xf7
,但我不知道为什么printf()
的输出是这样的。
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出为:fffffff7
。 我的机器是little-endian。当然我知道*b
等于0xf7
,但我不知道为什么printf()
的输出是这样的。
因为你的系统是小端,a
存储在内存中为F7 FF FF FF
。
b
指向a
的第一个字节。 (F7)
*b
评估为char
。 (F7)
*b
被提升到一个int
以它作为参数传递,因为它char
类型它是(通常默认为signed char
)符号扩展成为FFFFFFF7
的。
你在期待什么? – TGO
'%08x'要求十六进制,8个字符宽,带前导零。当以整数类型打印字符时,在打印之前将其扩展为int。 –
为什么输出不是000000f7 –