我正在从微控制器读取两个寄存器。一个有4位MSB(前4位有其他的东西)和另一个8位LSB。我想将它转换成一个12位uint(精确的16位)。到目前为止,我做了这样的:将两个8位uint转换为一个12位uint
UINT16 x;
UINT8 RegValue = 0;
UINT8 RegValue1 = 0;
ReadRegister(Register01, &RegValue1);
ReadRegister(Register02, &RegValue2);
x = RegValue1 & 0x000F;
x = x << 8;
x = x | RegValue2 & 0x00FF;
有没有更好的方式来做到这一点?
/*为了更加精确,ReadRegister与另一个ADC的I2C通信。 Register01和Register02是不同的地址。 RegValue1是8位,但只需要4个LSB,并连接到RegValue(RegValue1的4-LSB和RegValue的所有8位)。 */
“更好”在哪个意义上?这取决于什么对你很重要,例如便携性,速度,代码密度... –
我想你想要'x = x | (RegValue&0xFF)' – Esailija
@Esailija:'&'具有比'|更高的优先级。 –