有没有人试图获得二进制组件'一个数字?
我想做的是:
我的号码是5,所以它是二进制的0101。我试着找一些数字可以给我们的数据5.显然我知道它是1和4(0001和0100)但我无法通过代码找出获得该数字的方法。
MDN在Bitwise Operators上有很好的文章,但仍然没有快乐。
答案 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的相应幂,或者如果您愿意,可以过滤掉零。