×
单片机 > 单片机程序设计 > 详情

C51中float定义的实数存放形式

发布时间:2020-06-04 发布时间:
|

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位。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址