首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解两种对浮标的补充(德州仪器传感器标签)

了解两种对浮标的补充(德州仪器传感器标签)
EN

Stack Overflow用户
提问于 2015-01-29 20:43:39
回答 1查看 1.2K关注 0票数 1

我在github:calcs.py上找到了一些从德州仪器传感器标签中提取温度的示例代码

我不明白下面的代码是干什么的:

代码语言:javascript
复制
tosigned = lambda n: float(n-0x10000) if n>0x7fff else float(n)

我是如何阅读上面的代码的:

代码语言:javascript
复制
if n>0x7fff: n = float(n-0x10000)
else n = float(n)

基本上,所发生的事情是,两个的补值(N)被转换成浮点数。为什么只有当n的值大于0x7fff时才会发生这种情况?如果值为0x7fff或更小,则只需将i转换为浮动。为什么?我不明白这个。

来自德州仪器的示例代码可以在这里找到:开发

为什么在TI示例代码中此函数中的返回值被128.0除以?

代码语言:javascript
复制
private double extractAmbientTemperature(BluetoothGattCharacteristic c) {
    int offset = 2;
    return shortUnsignedAtOffset(c, offset) / 128.0;
}

我确实向开发人员问过这个问题,但没有得到答复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 21:23:17

在磁盘和内存中,整数被存储到一定的位宽.现代Python的int允许我们忽略大部分细节,因为它们可以神奇地扩展到任何需要的大小,但有时当我们从磁盘或其他系统获得值时,我们必须考虑它们是如何实际存储的。

16位有符号整数的正值将存储在0x0001-0x7fff范围内,其负值将存储在0x8000-0xffff中。如果这个值是以某种方式读取的,而没有检查符号位(可能是一个无符号整数,或者是一个较长的整数的一部分,或者是从两个字节组装的),那么我们需要恢复这个符号。

多么?如果值在0x7fff上,我们知道它应该是负值,负值存储为二补。因此,我们简单地从它减去0x10000,得到负值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28224223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档