找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8786|回复: 2
收起左侧

[求助]二进制小数转换十进制小数的捷径!

[复制链接]
ID:5918 发表于 2008-10-15 11:19 | 显示全部楼层 |阅读模式

问题如下:现有一二进制 整数 1111 而我要把它表示为十进制小数点两位有效数字?在DX18B20温度小数转换碰到的问题!要用最简单直接的方法,不要出现2的负几次方之类的转换! 向高手求救谢谢!

补充问题:

用DS18B20精确到小数点后一位的温度测量实现

DS18B20的测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C

从DS18B20输出的后4位就是小数点后的数,其数值乘与0.0625就是实际的温度,大家知道,在8位的51单片机中,做个乘法并不容易,而且DS18B20精度为±0.5°C,有的算法直接舍去从而精确到1°C

1,我看到有些程序用查表法确定精度,这是一个很好的方法!但查表法有它的弱点要列表!

2,也看到有同志用这样的方法,

如果a是从18B20里读来的低8位值

xiaoshu1 = (a&0x0f)*10/16; //小数第一位

xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位

xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位

这里我就是弄不懂为什么是乘以十就是小数第一位 乘以一百就是小数第二位?

尽管精度是0.5C,没有实际意义,但这种算法是有用的,就是不知道其原理?

所以引申问题:现有一二进制 整数 N位 而我要把它表示为十进制小数点M位(M<N)有效数字?该怎样进行转换?

实际中肯定会有类似问题!

回复

使用道具 举报

ID:5918 发表于 2008-10-15 19:04 | 显示全部楼层

要顶  啊

回复

使用道具 举报

ID:5857 发表于 2008-10-18 22:41 | 显示全部楼层
我感觉可以用数组来代替,不过得好好编排一下才行。把0000-1111和小数对应起来,定义宏也行。不知道可行不。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表