所有变量在内存中都是2进制啊,不管你是浮点还是整型
double有点麻烦,看起来也晕,我算个float型的吧,就把楼主的double改成float
d表示10进制
b表示2进制
5.6d=(101.1001100110011001100110011)b 十进制小数转换为二进制小数
=(1.01100110011001100110011)b * (2^2) 指数是阶码真值
=(1 + 0.01100110011001100110011(尾数))b * (2^2(阶码真值))
该浮点值为正,所以数符为0
阶码=阶码真值+127=2+127=129=(10000001)b
尾数=01100110011001100110011
该浮点数在内存中表示为
数符 阶码 尾数 给它们并到一块就是了
01000000101100110011001100110011
这个数表示为整数时,就代表整数的补码。
因此换算成整数就是1085485875
不信你在C里写
int *p,k=10;
float *q,f=5.6;
p=&k;
q=&f;
p=(int*)q;
printf("%d\n",*p);
看看输出结果