51单片机编程中两个常数0.5和50的表示方法

2019-03-24 19:58发布

在编程中0.5和0.473用浮点数表示分别是3F000000和3EF22D0E,那么,如果是50和62.5该如果表示呢?请行家指教。谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
leang521
2019-03-24 23:48

C51浮点数为float类型,占32位。其二进制存储格式遵循IEEE754标准。所以建议你先去看下这个标准。

以float为例:

符号位(S) 阶码(E)    尾数(M)
(31)1位     (30-23)8位    (22-0)23位

符号位:正数为0,负数为1
阶码:(补码形式存放),其中D30是符号位,与一般表示方法不同,它用1表示正,用0表示负。
尾数:(原码形式存放)(注意第一位尾数不出现在内存中,它总是1,故省略了。)

以float 0.5为例:
(1)将十进制数0.5转换为二进制数为:0.1
将这个实数的绝对值转化成二进制格式。(整数部分:除二取余,逆序排列;小数部分:乘2取整,顺序排列。)
(2)将这个二进制格式实数的小数点,左移或右移n位,直到整数部分有且只有一位有效数字(即整数部分必须为一个1)。
则变为:1.0
(3)从小数点左边第一个二进制数字开始,取23位数字放入D22-----D0位(尾数部分)。

**** **** *000 0000 0000 0000 0000 0000

(4)如果该实数为正数,则在D31(数符位)位写入1,负数写入0

0*** **** *000 0000 0000 0000 0000 0000

(5)如果n是左移得到的,则说明指数是正,则在D30位写入1;如果n是右移得到的或n=0,则D30位放入0

00** **** *000 0000 0000 0000 0000 0000

(6)如果n是左移得到的,则将(n-1)后转化成二进制,并在左边补0得到7位二进制数,放入D29----D23中。如果n是右移得到或n=0,则将你转化成二进制后在左边补0得到7位二进制数,然后依次各位取反,对应写入D29-----D23

0011 1111 0000 0000 0000 0000 0000 0000

 

转为16进制位3F0000


一周热门 更多>