【发布时间】:2017-12-13 21:04:43
【问题描述】:
一点上下文,当我试图解决 javascript 问题以查找所有可能的子集时,我正在查看另一篇 SO 帖子。我不是问 JS 挑战,而是问它为什么会出现,它有什么数学意义?
这里是this SO post的代码复制粘贴
var arr = [1, 2, 3];
function generatePowerSet(array) {
var result = [];
result.push([]);
for (var i = 1; i < Math.pow(2, array.length); i++, result.push(subset))
for (var j = 0, subset = []; j < array.length; j++)
if (i & Math.pow(2, j))
subset.push(array[j]);
return result;
}
console.log(generatePowerSet(arr));
我不明白if (i & Math.pow(2, j)) 行正在完成什么。 mozilla doc 表示它对每个位对执行 AND 比较。为什么相关?
当我说相关时,我的意思是,例如使用 LEFT SHIFT,执行 a << b 和b 是1,则它的等效数学函数乘以2。在这种情况下,我不明白 & 的数学函数是什么。
【问题讨论】:
-
这是一个数学
AND,来自布尔代数。并非所有数学都是基于算术的。 -
我认为输入和运算结果之间没有任何有助于理解的数学关系。只需查看位模式即可。
标签: javascript bitwise-operators