首页 > 解决方案 > 如何在 JavaScript 中 (a) 从 32 位整数中提取和 (b) 删除位

问题描述

因此,我正在尝试按照我见过的有关 BitMasks 和 Bit Manipulation 的教程进行操作,但没有得到预期的结果。

var a = 0b11110000000000000000000000000000
var b = 0b10010000000000000000000000000000
var c = a & b
console.log(c.toString(2))
// ...

AND 运算符只会在所有参数都有一个的每个位置放置一个。

expected  0b10010000000000000000000000000000
received -0b01110000000000000000000000000000

这里和其他地方展示了如何清除和设置单个位,但我想知道位的范围/跨度。

  1. 如何选择模式中的设置位0b11110000000000000000000000000000。因此,任何具有0b101101010101...或任何其他前 6 位数字的内容都将提取为类似0b1011010000...or的数字0b101101,其中该数字是 6 位数字,或者是所有尾随 rhs 值设置为 0 的 32 位数字。这样我可以做到对整数进行一次检查以检查它是否具有特定模式。
  2. 如何从整数中清除或删除这些位,所以不是以 6 个 lhs 位结束,而是以剩余的 26 个 rhs 位结束。

标签: javascriptbit-manipulation

解决方案


当我尝试计算颜色十六进制时,我遇到了类似的问题。

您可以使用>>> 0使结果无符号,然后正确获取其二进制文件。

有关更多说明,请参阅此答案

var a = 0b11110000000000000000000000000000;
var b = 0b10010000000000000000000000000000;
var c = (a & b) >>> 0;
console.log(c.toString(2));


推荐阅读