javascript - 如何使用位掩码在 JavaScript 中存储 bool 值

标签 javascript bitmask

阅读有关如何使用位掩码存储 bool 值后,我有点困惑。我想要一组 bool 值,然后为这些值的每个组合生成一个唯一的整数。这是目前的系统:

var a = 1 << 1
var b = 1 << 2
var c = 1 << 3
var d = 1 << 4

var uniqueint1 = getInt(true, false, false)
var uniqueint2 = getInt(true, true, false)
var uniqueint3 = getInt(true, true, true)
// ...

function getInt(x, y, z) {
  var value = a
  if (x) value = value | b
  if (y) value = value | c
  if (z) value = value | d
  return value
}

但问题是,我不确定我是否应该按照以下方式处理“不”的情况:

function getInt(x, y, z) {
  var value = a
  if (x) value = value | b
  else value = value ^ b

  if (y) value = value | c
  else value = value ^ c

  if (z) value = value | d
  else value = value ^ z

  return value
}

我所知道的是,我见过与位掩码相关的 |&^,并且我知道如果 bool 值在您执行的位掩码中 var yes = value & b,但我只是对如何生成位掩码以便它处理 if (true) 和 if (false) 情况感到困惑。不确定我是否应该在某处使用 ^ ,或者我做错了什么。请指教。谢谢!

最佳答案

I am not sure if I am supposed to handle the "not" case

你根本不应该处理它。位掩码的作用是,如果设置了标志,则位值为 1,否则位值为 0。鉴于您的值在任何地方都以 0 开头(整数 0),您只需在条件为真时设置该位(按 OR 1),否则您无需执行任何操作。

您可以将代码简化为

function getInt(x, y, z) {
  return (0b10 // a
          | (x << 2)   // 0b00100 if x and 0b00000 else
          | (y << 3)   // 0b01000 if y and 0b00000 else
          | (z << 4)); // 0b10000 if z and 0b00000 else
}

关于javascript - 如何使用位掩码在 JavaScript 中存储 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47914570/

相关文章:

c# - 按位减法

javascript - Leaflet 标记弹出窗口中的缓存破坏

javascript - 如何在双色热图中从 D3 更改热图?

javascript - 如何声明数组中的键值对并为其赋值

javascript - 连续动画显示或隐藏元素而不褪色

c++ - C++ 中的运行时位复制(位掩码)

javascript - api 返回一个带有编号和命名键的数组

objective-c - 位掩码的递增部分

ios - 如何通过整数获得垂直和水平对齐?

c - 编写一个变量宏,它在一个整数中设置特定位(位掩码)