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

Jsp*_*ake 2 c embedded bit-shift

在完成我的课程作业时,我遇到了一个从TMP102传感器读取温度的功能(仅需要测量正温度).
该函数首先使用I2C读取MSB和LSB.由于温度数据是12位且左对齐,因此函数如下进行:

temp = ( (MSB << 8) | LSB) >> 4  
Run Code Online (Sandbox Code Playgroud)

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

小智 7

v点温度值,p右边是填充位,然后就可以了

MSB = vvvvvvvv
LSB = vvvvpppp

---

  MSB << 8               = vvvvvvvv 00000000
 (MSB << 8) | LSB        = vvvvvvvv vvvvpppp
((MSB << 8) | LSB) >> 4  = 0000vvvv vvvvvvvv
Run Code Online (Sandbox Code Playgroud)

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