2

代码:

int main()
{
    unsigned int a = 0xfffffff7;
    char *b = (char *)&a;
    printf("%08x",*b);
}

输出是:fffffff7。我的机器是小端的。我当然知道*bequals 0xf7,但我不知道为什么输出printf()是这样的。

4

2 回答 2

4

由于您的系统是小端的,a因此在内存中存储为F7 FF FF FF.

b指向 的第一个字节a。(F7)

*b评估为 a char。(F7)

*b被提升为 anint以便将其作为参数传递,因为它是类型char(通常默认为signed char),它被符号扩展为成为FFFFFFF7.

于 2013-08-18T14:03:25.203 回答
1
 +-----------------------+
 |  F7   <--b=(char *) &a|
 |  FF                   |
 |  FF                   |
 |  FF                   |
 |                       |
 +-----------------------+


 printf("%08x",*b);

//方法 :

  1. *b询问值 b 指向的指针 (F7)

  2. %08x要求十六进制,当将 char 作为整数类型打印时,它在打印之前扩大为 int。(现在FFFFFF7)

于 2013-08-18T13:48:00.410 回答