位数学和掩码与数字的相关性

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;