我们知道,每个数字都可以表示成科学计数法,比如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位操作系统!
3682

被折叠的 条评论
为什么被折叠?



