代码:
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出是:fffffff7。我的机器是小端的。我当然知道*bequals 0xf7,但我不知道为什么输出printf()是这样的。
代码:
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
输出是:fffffff7。我的机器是小端的。我当然知道*bequals 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)