C51中float定义的实数存放形式
扫描二维码
随时随地手机看文章
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位。