在学习 class 时,我遇到了一个从TMP102 sensor读取温度的函数(仅在测量正温度时才需要)。
该功能首先使用I2C读取MSB和LSB。由于温度数据是 12位且左对齐,因此该函数按以下方式进行:

temp = ( (MSB << 8) | LSB) >> 4

我不明白为什么要这么做。有人可以帮我解释一下上面的代码行与12位和左对齐数据之间的关系吗?

最佳答案

假设v为温度值的一部分,而p为右侧的填充位,则

MSB = vvvvvvvv
LSB = vvvvpppp

---

  MSB << 8               = vvvvvvvv 00000000
 (MSB << 8) | LSB        = vvvvvvvv vvvvpppp
((MSB << 8) | LSB) >> 4  = 0000vvvv vvvvvvvv

在最后一行中,您可以看到正确的表示形式是16位值(高4位始终为0)。

关于c - 如果数据左对齐,则读取MSB和LSB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45050196/

10-10 07:20