JavaScript设置了四位

bod*_*ser 1 javascript bit-manipulation bit bitwise-operators node.js

我得到了以下位模式:

1000 0001 (129)
Run Code Online (Sandbox Code Playgroud)

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

1000 0010
Run Code Online (Sandbox Code Playgroud)

要么

1000 1000
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

然后在一个新的地图上映射,但我认为这是自我解释,这是废话.

Poi*_*nty 5

您可以先设置一个整数的低四位0xfffffff0,然后将整数与,然后将其与四位值进行或运算.

function setLowFour(n, lowFour) {
  return (n & 0xfffffff0) | (lowFour & 0xf);
}
Run Code Online (Sandbox Code Playgroud)

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

编辑 - 我认为它实际上也有效:-) setLowFour(1025, 12)返回1036.如何进行单元测试?