2

我得到以下位模式:

1000 0001 (129)

我现在想设置最后四位(1 - 10, 0x1 - 0xA):

1000 0010

或者

1000 1000

我实际上不知道如何做到这一点。我可以读出前四位:

var buff = new Buffer(1);

buff[0] = 129;

var isFirstBitSet = (buff[0] & 128) == 128;
var isSecondBitSet = (buff[0] & 64) == 40;
var isThirdBitSet = (buff[0] & 32) === 32;
var isFourthBitSet = (buff[0] & 16) === 16;

var buff[0] = 0xA;

if (isFirstBitSet) {
    buff[0] = buff[0] & 128;
}

然后映射到一个新的,但我认为这是自我解释,这是废话。

4

1 回答 1

6

您可以设置整数的低四位,方法是先将整数与整数进行与运算0xfffffff0,然后将其与四位值进行或运算。

function setLowFour(n, lowFour) {
  return (n & 0xfffffff0) | (lowFour & 0xf);
}

请注意,JavaScript 并没有真正的整数类型。按位运算强制值是整数,但它们实际上仍然存储为浮点数。

编辑——我认为它实际上也可以工作 :-)setLowFour(1025, 12)返回 1036。单元测试怎么样?

于 2013-01-07T16:10:09.013 回答