晚上好,
我正在尝试将所需的值与需要发送到I2C设备的值相关联,并且我遇到了位数学和屏蔽问题。
我的范围从-15到15,设备的范围也是如此。 Example of required values
这是我用来获得所需值的东西,它似乎正在我能说的工作。 "数字1"是该寄存器的上电值。
int number1 = 254;
int number2 = 14;
int number3;
int number4;
if (number2 <= 0) {
number3 = number2 + 15;
}
else {
number3 = (number2 ^ 15) | 16; // XOR 0b00001111 then Set bit 4
}
number4 = (number1 & 0b11100000) + number3;
我遇到了一个问题,试图找出如何设置/清除寄存器中的5位所需的8位,而不影响3位最高位。
我认为我拥有它,但看起来这样做效率很低,有没有更好的方法呢?
谢谢,
DW
答案 0 :(得分:0)
清除8位值的5个LSB位而不影响3个MSB位,
number &= 0xE0;
设置5个LSB位,
number |= 0x1F;