代码:
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出是:fffffff7
。我的机器是小端的。我当然知道*b
equals 0xf7
,但我不知道为什么输出printf()
是这样的。
代码:
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出是:fffffff7
。我的机器是小端的。我当然知道*b
equals 0xf7
,但我不知道为什么输出printf()
是这样的。
由于您的系统是小端的,a
因此在内存中存储为F7 FF FF FF
.
b
指向 的第一个字节a
。(F7)
*b
评估为 a char
。(F7)
*b
被提升为 anint
以便将其作为参数传递,因为它是类型char
(通常默认为signed char
),它被符号扩展为成为FFFFFFF7
.
+-----------------------+
| F7 <--b=(char *) &a|
| FF |
| FF |
| FF |
| |
+-----------------------+
printf("%08x",*b);
//方法 :
*b
询问值 b 指向的指针 (F7)
%08x
要求十六进制,当将 char 作为整数类型打印时,它在打印之前扩大为 int。(现在FFFFFF7)