【补记】
这个文章是几年前写的,重新整理了一下到这里。
当时是在VC6的环境下做的测试,但是我怀疑这个基本上就是C++规范的实现。
【原文】
首先说明的是,浮点数在内存中始终只是是一个近似值,比如,2.3+4.5在java中等于6.777777777777779或者6.800000000000001,当然这也给程序员带来了不方便,c++相对就没有这个问题
浮点数存储时,分成三部分,分别是符号,指数和尾数。不同的系统采用不同的存储方法,比如指数,有的系统用移码存,有的用补码存,这里介绍的是vc++6.0里存储的方法。
程序源代码如下:
//在vc++6.0中调试通过
int main()
{
float a=2.0f; //这里分别让a等于2.0,-2.0,1,0.75,2.5,0.1,0
char *p=(char*)&a;
p+=3; //将地址由高到底
int line=0,temp=0;
while(temp=0;i--)
{
if(*p&(1〈〈i)) cout<</'1/';//作与运算,如果和1与为1,说明该二进制是1,否则为0,其中还有左移运算
else cout<</'0/';
line++;
if(line%4==0) cout<</' /';