double的结构

我们知道,每个数字都可以表示成科学计数法,比如5.12e10等于5.12 x 102, 对二进制也是一样可以适用,比如5的二进制格式是0101,使用科学计数法表示的结果就是1.01 x (0010)2。浮点数就是采用科学计数法存储的,对于double而言,总共64位,最高位是符号位:0表示正,1表示负,接着的11位为指数位,关系为:11位数组成的值(无符号)-1023=指数;剩下的52位是小数位(不包括小数点前面一位,对于二进制小数点前面一位一定是1),也就是说这个小数是介于0001和0010之间的。举刚才的5作为例子,指数部分应该是0x401(0x401-1023=2),小数部分是0100...0000(共52位)=0x4 0000 0000 0000,合在一起就是0x4014 0000 0000 0000。为了加深理解,再举个例子,500,二进制的值为111110100,因此科学计数应该是1.11110100 x (0010)8,指数部分是8,所以高12位应该是0x407,小数部分应该是0xf 4000 0000 0000,合并起来就是0x407f 4000 0000 0000。

下面是一个简单的round函数,用于演示如何计算指数部分和小数部分,注意该函数只能在32位计算机运行,到了64位就不行啦。

这里特别提醒的是在x64系统下面从double直接转为int好像结果就不正确了,因此使用double的地方一定要小心转换,才能兼容64位操作系统!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值