我怎么能为此产生输出?

时间:2015-07-07 20:05:10

标签: c hex

问题:如果标准化形式的5.375二进制等值为0100 0000 1010 1100 0000 0000 0000 0000,则以下程序的O / P是多少:

#include <stdio.h>

int main(void) {
    float a = 5.375;
    char * p;
    int i;
    p = (char*)&a;
    for (i = 0; i <= 3; i++)
        printf("%02X\n",(unsigned char)p[i]);
    return 0;
}

这个问题出现在我的一本教科书中,并有4个与之相关的选项。在这里,我有几个疑问:

  1. p究竟包含哪些内容?指向?
  2. 的指针
  3. 02X的含义是什么?
  4. 取决于实际的O/P取决于机器是小端还是大端?
  5. 无论如何,给出的答案是:00 00 AC 40

    谢谢!

1 个答案:

答案 0 :(得分:2)

  1. char* p;表示p将成为指向char变量的指针,然后您拥有:

    p = (char*)&a;
    

    因此p存储变量&的地址(a)。

  2. %02X - 使用大写自动对焦字母(X)将无符号整数转换为十六进制格式,始终显示两个带有前面零的“数字”(2)({{ 1}}),更多http://en.cppreference.com/w/c/io/fprintf

  3. 它应该依赖,输出0用于小端,00 00 AC 40用于大端。在这里https://en.wikipedia.org/wiki/Endiannesshttps://en.wikipedia.org/wiki/Floating_point查看浮点数如何存储在内存中。