单片机,请教朋友们一个DS18b20传感器负温度的问题.,.
当温度为零下时,传感器里两个字节的温度数据为补码。请问:为了获得正确得温度绝对值,整数部分与小数部分是不是要先分开然后各自取补码?还是两个字节不动符号位,其余的一起取补码...
当温度为零下时, 传感器里两个字节的温度数据为补码。
请问:为了获得正确得温度绝对值, 整数部分与小数部分是不是要先分开 然后各自取补码? 还是两个字节不动符号位,其余的一起取补码?
比如-0.5℃, 两个字节里放的二进制数据是什么样得?
希望知道的朋友帮忙说下,以前没弄过负数以及负小数。百度找了好久也没有关于这个的。 先谢谢大家了。 展开
请问:为了获得正确得温度绝对值, 整数部分与小数部分是不是要先分开 然后各自取补码? 还是两个字节不动符号位,其余的一起取补码?
比如-0.5℃, 两个字节里放的二进制数据是什么样得?
希望知道的朋友帮忙说下,以前没弄过负数以及负小数。百度找了好久也没有关于这个的。 先谢谢大家了。 展开
展开全部
直接把取得的两个字节数据赋给int型的变量,然后乘以0.0625得到的就是带有符号的温度值,然后判断温度值是否小于0,如果小于0那么就用0减去这个int型数据 得到的就是正数
追问
我主要是想知道 当温度为负数且存在小数时, 是要把整数部分与小数部分分别拿出来取补码还是一起取了补码再拆出来。
看了你跟另外一个仁兄的说法, 基本肯定是一起取补码后再分别拆成小数与整数了。
你这个办法说得也很不错,0-x=0+(-x)。而在计算机里-x又是补码形式存在的,实际上就是0+x的补码=x的补码, 太犀利了。
感谢, 宿舍里得不到负温度,没法验证。
追答
可以用仿真验证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
展开全部
很简单了
int data = (TempH<<8) |TempL;
data = (data&0xF800)?data:(data^0xffff+1);
double ans = data/16;
int data = (TempH<<8) |TempL;
data = (data&0xF800)?data:(data^0xffff+1);
double ans = data/16;
更多追问追答
追问
有几个疑问,如果您看到,麻烦解答一下。
1,按您的程序来看,取补码整数与小数部分是一起运算的,也就是说不能先把整数部分拆出来取补码,再把小数部分拆出来取补码。 对吗?
2,TempH您是定义成整型的,对吗?
3,ans是整数部分了,对吗?如果是,为什么还要定义成double型?
再次感谢。
追答
1、TempH定义成uchar,定义成int也是可以的。
2、小数和整数一起取补运算
3、最后一个写错了,应该写成 double ans = data/16.0;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询