Javascript按位掩码

时间:2016-11-04 10:00:51

标签: javascript bitwise-operators

有没有人试图获得二进制组件'一个数字?

我想做的是:

我的号码是5,所以它是二进制的0101。我试着找一些数字可以给我们的数据5.显然我知道它是1和4(0001和0100)但我无法通过代码找出获得该数字的方法。

MDN在Bitwise Operators上有很好的文章,但仍然没有快乐。

3 个答案:

答案 0 :(得分:2)

var number = 5, 
    result = [];

for(var i = 1; i <= number; i = i << 1) {
  if(i & number) {
    result.push(i & number);
  }
}

console.log(result);

使用按位移位(i将数字乘以2,循环以2(1,2,4,8 ......)的幂递增i << 1,您也可以{{1如果原始数字设置了该位,则使用按位AND(i *= 2)进行检查。如果是这样,它会将其作为数字添加到结果数组中。

答案 1 :(得分:0)

您可以将Number.prototype.toString与基数参数一起使用。

var number = 5;
number.toString(2); // -> "101"

如果您需要这些数字,可以使用Number拆分该字符串和地图。

number.toString(2).split("").map(Number); // -> [1, 0, 1]

如果您不希望先将数字存储为变量,请务必将数字括在括号中。

5.toString(2).split("").map(Number); // -> SyntaxError
(5).toString(2).split("").map(Number); // -> [1, 0, 1]

答案 2 :(得分:0)

这是一个基于生成器的解决方案,它将产生一系列的1或0:

const bits = *(n) => { do yield n & 1; while (n >>= 1); };

> console.log(Array.from(bits(5));
< [1, 0, 1]

然后,您可以将结果乘以2的相应幂,或者如果您愿意,可以过滤掉零。