位数学和掩码与数字的相关性
Bit math and masks correlation to numbers
晚上好,
我正在尝试将所需值与需要发送到 I2C 设备的值相关联,但我在位数学和掩码方面遇到问题。
我的范围从 -15 到 15,设备的范围也是如此。
Example of required values
这是我用来获得所需值的方法,据我所知它似乎正在工作。 "number1" 是该寄存器的开机值。
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;
我在尝试弄清楚如何 set/clear 寄存器中 8 位所需的 5 位而不影响最高 3 位的情况下遇到问题。
我想我已经做到了,但这样做似乎效率很低,有没有更好的方法?
谢谢,
DW
清除 8 位值的 5 LSB 位而不影响 3 MSB 位,
number &= 0xE0;
设置 5 个 LSB 位,
number |= 0x1F;
晚上好,
我正在尝试将所需值与需要发送到 I2C 设备的值相关联,但我在位数学和掩码方面遇到问题。
我的范围从 -15 到 15,设备的范围也是如此。 Example of required values
这是我用来获得所需值的方法,据我所知它似乎正在工作。 "number1" 是该寄存器的开机值。
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;
我在尝试弄清楚如何 set/clear 寄存器中 8 位所需的 5 位而不影响最高 3 位的情况下遇到问题。
我想我已经做到了,但这样做似乎效率很低,有没有更好的方法?
谢谢,
DW
清除 8 位值的 5 LSB 位而不影响 3 MSB 位,
number &= 0xE0;
设置 5 个 LSB 位,
number |= 0x1F;