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

标签 javascript vbscript bit-manipulation

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

我在下面进行的按位运算的技术术语是什么?请记住,插槽的总数可能更高(例如,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(将 bool 值存储为字中的各个位),它是 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

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

关于javascript - 这个按位运算的技术名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52450066/

相关文章:

javascript - 为 Kwicks jQuery 插件创建 onAfter 事件

vbscript - 如何检查文件是否存在?

C++ Qt : bitwise operations

cmd - 如何使用 CMD 或 VBS 轻轻关闭 Chrome?

javascript - 按位运算符是否有可能一举完成相当于 "++i, --j"的操作?

c++ - 将 int8 转换为 int7 的最快方法

javascript - 只需要快速滚动触发/模拟鼠标+触控板上的滑动手势

javascript - Bootstrap 模式 : background jumps to top on toggle

javascript - 单击 "Save"时状态不更新

scripting - 如何区分 VBscript 是从命令行运行还是通过在窗口中单击运行?