javascript - 使用位掩码确定是否设置了 2 个或更多 bool 值

标签 javascript bit bit-shift bitmask

假设我有以下 bool 值:

var a;
var b;
var c;
var d;
var e;

我不在乎具体哪些是正确的,哪些是错误的,只关心至少有 2 个(或更多)是正确的。

我是否可以使用位掩码(或从这些变量生成一个位掩码)来确定这一点,而不必像这样运行每个排列:

如果(a或b)|| (一或三)|| (a或d)|| (一或五)|| (b或c)|| (b或d)|| (b 或 e)|| (c 或 d)|| (c 或 e)|| (d 或 e)

(编辑:正确示例)

如果(a 和 b)|| (一和三)|| (a 和 d) || (a 和 e) || (b 和 c) || (b 和 d) || (b 和 e)|| (c 和 d) || (c 和 e)|| (d 和 e)

他。

最佳答案

在 JavaScript 中添加 bool 值会将值强制转换为数字... false=>0, true=>1

因此

if ((a + b + c + d + e) > 1) {
    // at least 2 are true
}

但是,如果 a-e 不能保证为 bool 值,但可能为真/假,则首先将值强制为 bool 值(!!v 变为 true 或 false),然后将它们相加

if ((+!!a + !!b + !!c + !!d + !!e) > 1) {
    // at least 2 are true
}

进一步评论

how to tell if 2 or more bits are set (without caring which one)

if (x & (x - 1)) {
    // at least two bits set in x
}
<小时/>

或者如果您想要对 n 位集进行更通用的测试

const testIfNBitsSet = (v, n) => v.toString(2).split('1').length > n;

关于javascript - 使用位掩码确定是否设置了 2 个或更多 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600482/

相关文章:

统计二进制文件中 32 位数字的个数

c# - 两个左尖括号 "<<"在 C# 中是什么意思?

c - 二元加法

javascript - 如何在所有主流浏览器上播放 mp4 视频?

javascript - Google Chrome 上 WebAudio API 的不同行为

python - 逐位形成字节并连接字节

c - 在通用位掩码宏中消除 -Wshift-count-overflow 警告

javascript - 如何根据多个值进行过滤?

javascript - Highcharts xAxis 标签格式化程序回调数据为空

matlab - matlab 将某个位设置为 1