首先对浏览帖子的大侠表示由衷的感谢!小弟使用的是16f877的芯片,在project里把double类型改成32 bit,然后有以下语句:double test=50.265; 然后运行程序后,小弟在watch中观察test变量的值,用hex显示为42H 49H 0FH 5CH,但是这和小弟先前看过的一篇文档不符,该文档说法如下:
十进制数转换成浮点数
设:十进数为A,则2Z=A,Z= lnA/ln2,指数P=int(z);尾数部分X: X=A/2P, 其整数部分隐含为1(零除外),将其小数部分按原码格式化为二进制数,即为尾数的小数部分BY0 BY1 BY2。而指数偏差eb=P+7FH(其中的7FH 为指数的偏移量)。符号位S,视十进制数的正负而确定。
例如十进制数50.265化为32位规格化浮点数:A=50.265,则Z=ln50.265/ln2,P=int(Z),故P=5; X=A/2P=50.265/25=1.57078125,将0.57078125化为23位二进制小数,即是BY0 BY1 BY2,在最高位添上十进制数的符号位S(因十进制数为正数,故S=0);而eb=P+7FH,所以,十进制数50.265的32位规格化浮点数即为84H,49H,0FH,5CH。
请大侠赐教~~是文档说法有误,还是小弟哪里理解或操作有误呢? |