gpt4 book ai didi

python - 了解 float 的补码(德州仪器传感器标签)

转载 作者:行者123 更新时间:2023-11-30 23:15:29 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com