这个按位运算的技术名称是什么?

What is the technical name for this bitwise operation?

我正在将 Access 数据库中的一些旧的 Visual Basic 逻辑转换为 JavaScript。有些函数可以获取和设置一个值——由于缺少更好的术语——采用 "bitwise" 格式。我不得不拿出一支铅笔和一些纸来对负责的功能进行逆向工程。

我在下面进行的按位运算的技术术语是什么?请记住插槽总数可能更高(例如 15 而不是 6)。

---All scheduling slots selected, decimal value = 126

Slot    Selected?   Formula
-----   ----------  ----------
1       1           0 + 2^1 = 2
2       1           2 + 2^2 = 6
3       1           6 + 2^3 = 14
4       1           14 + 2^4 = 30
5       1           30 + 2^5 = 62
6       1           62 + 2^6 = 126

 integer value = 126


--Custom scheduling slots selected, decimal value = 82

Slot    Selected?   Formula
-----   ----------  ----------
1       1           0 + 2^1 = 2
2       0
3       0
4       1           2 + 2^4 = 18
5       0
6       1           18 + 2^6 = 82

integer value = 82

我认为这些通常称为 BitFlags(将布尔值存储为字中的各个位),这是 BitFields 的特例:为不同值寻址任意宽度的位.

它很可能有多个名称,因为它很明显,并且可能在人们学习编程时一直被独立地重新发现(我就是这样发现的)。

与计算数值相比,更常见的是使用 SHIFT 和 OR 构造位域,并使用 SHIFT 和 AND 破坏它们 - 因为这更直观、更直观(也更快);数值只是将整个单词解释为整数的副作用。即:

// construct
x = 0;
// set bit 0
x |= true << 0;
// set bit 1
x |= false << 1;
// set bit 2
x |= true << 2;

x // 5

// destruct
x = 3
// get bit 0
!! (x >> 0 & 1); // true
// get bit 1
!! (x >> 1 & 1); // true
// get bit 2
!! (x >> 2 & 1); // false

此外,如果您通过低效格式发送数据,例如文本或 JSON 而不是 AJAX,那么您将需要对结果数字进行编码以最大化每个字符中打包的位数。 .. 使用 x.toString(36) 可让您在单个字符 (a-z0-9) 中存储 5 位 (2^5 = 32)。或者如果你使用 String.fromCharCode(x + 32) 你可以再挤出一点 - 如果你看一下 ASCII table 那么你可以使用 32-127 = 95 范围内的所有 printable 字符,这是 6 位 (2^6 = 64) 的足够值,但不是 7 (2^7 = 128)。尝试使用超过 6 位将导致某些组合输出 multi-byte UTF8 字符,这可能不值得编码开销(它们将显示为一个字符,但实际上使用 2-4 个字节)。