c51中的浮点数采用ieee-754标准来表示,存储长度为4个字节,其中包含3个位域:数符,阶码和尾数。
(1)1位数符位:d31
(2)8位阶码:d30----d23(补码形式存放),其中d30是符号位,与一般表示方法不同,它用1表示正,用0表示负。
(3)23位尾数:d22----d0(原码形式存放)(注意第一位尾数不出现在内存中,它总是1,故省略了。)
将一个实数存数在c中的方式为:
(1)将这个实数的绝对值转化成二进制格式。(整数部分:除二取余,逆序排列;小数部分:乘2取整,顺序排列。)
(2)将这个二进制格式实数的小数点,左移或右移n位,直到整数部分有且只有一位有效数字(即整数部分必须为一个1)。
(3)从小数点左边第一个二进制数字开始,取23位数字放入d22-----d0位(尾数部分)。
(4)如果该实数为整数,则在d31(数符位)位写入1,负数写入0。
(5)如果n是左移得到的,则说明指数是正,则在d30位写入1;如果n是右移得到的或n=0,则d30位放入0。
(6)如果n是左移得到的,则将(n-1)后转化成二进制,并在左边补0得到7位二进制数,放入d29----d23中。如果n是右移得到或n=0,则将你转化成二进制后在左边补0得到7位二进制数,然后依次各位取反,对应写入d29-----d23位。
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
d31 | d30 | d29 | d28 | d27 | d26 | d25 | d24 | d23 | d22 | d21 | d20 | d19 | d18 | d17 | d16 | d15 | d14 | d13 | d12 | d11 | d10 | d9 | d8 | d7 | d6 | d5 | d4 | d3 | d2 | d1 | d0 |
下面,将23.56化为c语言的float格式存储,讲述浮点数的存数方式:
(1)按“整数部分:除二取余,逆序排列”,“小数部分:乘2取整,顺序排列”将23.56转化成二进制实数约为:10111 . 1000,1111,0101,1100,001(因为要左移4位,所以小数点后保留23-4位数字即可)(若为负数,则此步骤位求其绝对值的二进制实数表达形式)
(2)将小数点左移4位(n=4),得到1 . 0111,1000,1111,0101,1100,001
(3)这时已经有24位位数了,将最高位的1舍去,将剩下的23位小数部分数字对应写入尾数的d22---d0位。
(4)由于23.56是正数,所以在d31(数符位)写入0。
(5)因为我们把小数点左移,因此在d30位放入1(指数为正数)。
(6)因为我们把小数点左移n=4位,所以(n-1)=3,化为二进制,补足7位为:000,0011。写入d29---d23位。
『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』