问题:如果标准化形式的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个与之相关的选项。在这里,我有几个疑问:
p
究竟包含哪些内容?指向?02X
的含义是什么?O/P
取决于机器是小端还是大端?无论如何,给出的答案是:00 00 AC 40
。
谢谢!
答案 0 :(得分:2)
char* p;
表示p
将成为指向char
变量的指针,然后您拥有:
p = (char*)&a;
因此p
存储变量&
的地址(a
)。
%02X
- 使用大写自动对焦字母(X
)将无符号整数转换为十六进制格式,始终显示两个带有前面零的“数字”(2
)({{ 1}}),更多http://en.cppreference.com/w/c/io/fprintf
它应该依赖,输出0
用于小端,00 00 AC 40
用于大端。在这里https://en.wikipedia.org/wiki/Endianness和https://en.wikipedia.org/wiki/Floating_point查看浮点数如何存储在内存中。