面试题:
double d=100.25
int a=d;
int *b=(int *)(&d);
printf("%d\n",a);
printf("%d\n",*b);
求输出(答案是100 和0)
验证d在内存中表示(1位符号位+11位阶码位+52位尾数位)可以使用下面语句:【注意:11位字长阶码位,采用的是移码表示,原码+10个1;尾数采用补码表示】
printf("%llx",d);
注意:使用%x %lx都是输出0
输出4059100000000000 写成二进制:
0100 0000 0101 1001 0001 0000...
千万注意:小数点后的数表示方式与整数的不同,1001 0001 在尾数的最前面而不是最后面
现实表示和内存存储的不同,现实中的一个数,比如8字节,字节是倒着存储的,当然用%llx打印出来与现实一样,但如果使用指针逐字节打印,
就必须首先p+8,循环打印的时候使用p--。
即:所谓的存储数据的字节顺序,高字节、低字节并不是指一个16位字的高字节、低字节,而是任何长度数据的高字节、低字节,在Intel x86cpu 中是小端存储,总是从最后一个字节开始随地址增加倒着存储