【发布时间】:2018-10-02 00:13:52
【问题描述】:
假设我有以下布尔值:
var a;
var b;
var c;
var d;
var e;
我不在乎哪些具体是真的,哪些是假的,只要至少 2 个(或更多)是真的。
我是否可以使用位掩码(或从这些变量生成一个位掩码)来确定这一点,而不必像这样运行每个排列:
if (a or b) || (a or c) || (a or d) || (a or e) || (b or c) || (b or d) || (b or e) || (c or d) || (c or e) || (d or e)?
(编辑:正确示例)
if (a and b) || (a and c) || (a and d) || (a and e) || (b and c) || (b and d) || (b and e) || (c and d) || (c and e) || (d and e)?
Ta。
【问题讨论】:
-
permutation like this- 如果其中任何一个变量为真,则排列为真 - 所以,这不是一个好的开始 - 我认为那些or应该是&&......无论如何。 ..if ((+!!a +!!b +!!c +!!d +!!e) > 1)- 或者如果这些变量保证是布尔值if ((a+b+c+d+e) > 1) -
是的,你是对的,而不是括号中的部分。 +!!是的。我没想过将布尔值转换为int。如果您将其写为答案,我可以接受。另外,这可以通过口罩实现吗?假设我改述说,如何判断是否设置了 2 位或更多位(不关心哪一个)
-
当然是
-
我现在在答案中添加了测试位
标签: javascript bit bit-shift bitmask