这是代码。有人可以解释它的输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
double a=5.2;
char*ptr;
ptr=(char*)&a;
for(int i=0;i<=7;i++)
printf("%d",*ptr++);
return 0;
}
答案 0 :(得分:1)
double
5.2
的内存布局为01000000 00010100 11001100 11001100
11001100 11001100 11001100 11001101
。您可以检查它here
因为您的标准PC是低端字节序,所以最后一个字节在前。
因此,第一个字节11001101
将被提升为int
并被打印。是-51
。
第二个字节11001100
将打印为-52
。
第三-52
... -52
-52
-52
20
64
因此,输出之间没有空格-51-52-52-52-52-522064
。
这仅适用于小端字节序的机器,签名为char
,并且IEEE-754加倍。对于大型字节序机器,输出为6420-52-52-52-52-52-51
。如果您的char
未签名,则-51
将是205
,而-52
将是204
。