- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 github 上找到了一些从德州仪器 (TI) 传感器标签中提取温度的示例代码: https://github.com/msaunby/ble-sensor-pi/blob/master/sensortag/sensor_calcs.py
我不明白以下代码的作用:
tosigned = lambda n: float(n-0x10000) if n>0x7fff else float(n)
我如何阅读上面的代码:
if n>0x7fff: n = float(n-0x10000)
else n = float(n)
基本上发生的事情是将二进制补码值(n)转换为 float 。为什么只有当 n 的值大于 0x7fff 时才会发生这种情况?如果该值是 0x7fff 或更小,那么我们只需将 i 转换为 float 。为什么?我不明白这个。
可以在此处找到德州仪器 (TI) 的示例代码: http://processors.wiki.ti.com/index.php/SensorTag_User_Guide#SensorTag_Android_Development
为什么TI示例代码中该函数的返回值除以128.0?
private double extractAmbientTemperature(BluetoothGattCharacteristic c) {
int offset = 2;
return shortUnsignedAtOffset(c, offset) / 128.0;
}
我确实向开发者询问过这个问题,但没有得到回复。
最佳答案
在磁盘和内存中,整数以一定的位宽存储。现代 Python 的 int 允许我们忽略大部分细节,因为它们可以神奇地扩展到所需的任何大小,但有时当我们从磁盘或其他系统获取值时,我们必须考虑它们实际上是如何的已存储。
16位有符号整数的正值将存储在0x0001
-0x7fff
范围内,其负值将存储在0x8000
范围内-0xffff
。如果以某种尚未检查符号位的方式读取该值(可能作为无符号整数,或较长整数的一部分,或由两个字节组装而成),那么我们需要恢复符号。
0x7fff
,我们就知道它
应该为负数,并且负值存储为
two's complement 。因此,我们只需从中减去
0x10000
即可得到负值。
关于python - 了解 float 的补码(德州仪器传感器标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28224223/
我是一名优秀的程序员,十分优秀!