Javascript 按位掩码
Javascript bitwise mask
有没有人试图得到一个数字的二进制 'components'?
我想做的是:
我有数字:5,所以二进制是0101。我正在尝试找到可以给我们 5 的数字的总和。显然我知道它是 1 和 4( 0001 和 0100 )但我无法想出通过代码获得它的方法。
MDN 有关于位运算符的好文章,但仍然没有乐趣。
var number = 5,
result = [];
for(var i = 1; i <= number; i = i << 1) {
if(i & number) {
result.push(i & number);
}
}
console.log(result);
循环使用移位(i << 1
将数字乘以 2,以 2 的幂(1、2、4、8...)递增 i
,您也可以执行 i *= 2
) 并使用按位与 (&
) 检查原始数字是否设置了该位。如果是这样,它会将其作为数字添加到结果数组中。
您可以使用带有基数参数的 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]
这是一个基于生成器的解决方案,它将产生一系列的 1 或 0:
const bits = *(n) => { do yield n & 1; while (n >>= 1); };
> console.log(Array.from(bits(5));
< [1, 0, 1]
然后,如果您愿意,您可以将结果乘以相应的 2 的幂,和/或过滤掉零。
有没有人试图得到一个数字的二进制 'components'?
我想做的是:
我有数字:5,所以二进制是0101。我正在尝试找到可以给我们 5 的数字的总和。显然我知道它是 1 和 4( 0001 和 0100 )但我无法想出通过代码获得它的方法。
MDN 有关于位运算符的好文章,但仍然没有乐趣。
var number = 5,
result = [];
for(var i = 1; i <= number; i = i << 1) {
if(i & number) {
result.push(i & number);
}
}
console.log(result);
循环使用移位(i << 1
将数字乘以 2,以 2 的幂(1、2、4、8...)递增 i
,您也可以执行 i *= 2
) 并使用按位与 (&
) 检查原始数字是否设置了该位。如果是这样,它会将其作为数字添加到结果数组中。
您可以使用带有基数参数的 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]
这是一个基于生成器的解决方案,它将产生一系列的 1 或 0:
const bits = *(n) => { do yield n & 1; while (n >>= 1); };
> console.log(Array.from(bits(5));
< [1, 0, 1]
然后,如果您愿意,您可以将结果乘以相应的 2 的幂,和/或过滤掉零。