double类型内存存储

面试题:

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 中是小端存储,总是从最后一个字节开始随地址增加倒着存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值