javascript - 如何在 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
这里和其他地方展示了如何清除和设置单个位,但我想知道位的范围/跨度。
- 如何选择模式中的设置位
0b11110000000000000000000000000000
。因此,任何具有0b101101010101...
或任何其他前 6 位数字的内容都将提取为类似0b1011010000...
or的数字0b101101
,其中该数字是 6 位数字,或者是所有尾随 rhs 值设置为 0 的 32 位数字。这样我可以做到对整数进行一次检查以检查它是否具有特定模式。 - 如何从整数中清除或删除这些位,所以不是以 6 个 lhs 位结束,而是以剩余的 26 个 rhs 位结束。
解决方案
当我尝试计算颜色十六进制时,我遇到了类似的问题。
您可以使用>>> 0
使结果无符号,然后正确获取其二进制文件。
有关更多说明,请参阅此答案。
var a = 0b11110000000000000000000000000000;
var b = 0b10010000000000000000000000000000;
var c = (a & b) >>> 0;
console.log(c.toString(2));
推荐阅读
- c++ - STL算法C++中的Swap()
- python - ConnectionError:Python 使用 requests.Session().send(my_request_here)
- c - 尽管在编译过程中没有问题,但运行 c 程序时出现语法错误
- c++ - 在 OpenGL 中旋转/平移对象
- windows - MinGW 缺少品牌?
- html - 防止在受控的反应输入中重新呈现表单
- ios - 如何在 Xcode 11.6 中添加添加 plist 文件?
- javascript - 如何在 Asp.net MVC 中显示/隐藏多个文本输入
- git - Git 在其他分支上时将更改应用于主分支
- php - 这个相册画廊插件是什么?