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

时间:2015-03-09 02:22:42

标签: java android bitmask

晚上好,

我正在尝试将所需的值与需要发送到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

1 个答案:

答案 0 :(得分:0)

清除8位值的5个LSB位而不影响3个MSB位,

number &= 0xE0;

设置5个LSB位,

number |= 0x1F;