浮点数(小数)在计算机中如何用二进制存储? |
您所在的位置:网站首页 › 怎样转化二进制数 › 浮点数(小数)在计算机中如何用二进制存储? |
浮点数在计算机中如何用二进制存储?
前言
前面我有篇博文详解了二进制数,以及如何同二进制数表示整数。但是,计算机处理的不仅仅是整数,还有小数,同样小数在计算机也是用二进制进行存储的,但是,二进制如何去存储小数呢?计算机对于小数的计算又是否真的丝毫不差呢?本文将进行介绍。 一、用二进制表示小数二进制转换为十进制的方法就是各个位的数字与位权乘积之和。二进制数小数点前面部分的位权,第 1 位是 2 的 0 次幂、第 2 位 是 2 的 1 次幂……以此类推。小数点后面部分的位权,第 1 位是 2 的-1次幂、第2位是2的-2次幂。以此类推。0次幂前面的位的位权 按照 1 次幂、2 次幂……的方式递增,0 次幂以后的位的位权按照-1 次幂、-2次幂……的方式递减。这一规律并不仅限于二进制数,在十 进制数和十六进制数中也同样适用。 如把1011.0011这个有小数点的二进制数转换成十进制数过程如下: 我们可以很快算出,0.1累加100次后的结果是10,但是计算机算出来结果是10吗?实际上它计算出的结果是10.0000002 #include void main(){ float sum; int i; // 将保存总和的变量清 0 sum = 0; //0.1 相加 100 次 for (i = 1; i = 0; i--) { // 加入破折号来区分符号部分、指数部分和尾数部分 if (i==1||i==10) { s[i] = '-'; } else { // 为各个字节赋值 '0' 或者 '1' if (buff % 2 == 1) { s[i]='1'; } else { s[i]='0'; } buff/=2; } } s[34]='\0'; printf("%s\n",s); }运行结果如下 有两种方法: 第一、回避策略,即无视这些错误。 第二、把小数转换成整数来计算。例如,将0.1相加 100 次这一计算,就可以转换为将 0.1 扩大 10 倍后再将 1 相加 100 次的计算,最后把结果除以10就可以了。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |