如果数据是左对齐的,则读取MSB和LSB

时间:2017-07-12 06:39:05

标签: c embedded bit-shift

在完成课程学习的过程中,我遇到了一个从TMP102 sensor读取温度的函数(仅需要测量正温度)。
该函数首先使用I2C读取MSB和LSB。由于温度数据 12位且左对齐,因此功能如下:

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

我不明白为什么这样做。有人可以帮我解释上面的代码行是如何与12位和左对齐的数据相关的?

1 个答案:

答案 0 :(得分:7)

v成为温度值的一点,p是右边的填充位,那么你有

MSB = vvvvvvvv
LSB = vvvvpppp

---

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

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