位掩码提供了一种有效的方式来操作存储为32位(或64位)有符号整数的小布尔集合,但以短32位(或64位)字符字符串的形式解释。
通过使用位运算,可以轻松快速地检查整数的每个位,打开(或关闭)它们。它可以用于各种算法,例如旅行商问题的动态规划解决方案,以加速关键(小)集合操作。
Remarks: By default, we show e-Lecture Mode for first time (or non logged-in) visitor.
If you are an NUS student and a repeat visitor, please login.
上面显示了位掩码数据结构及其操作的可视化。
顶部行描述了输入整数 S 的位索引,从最右边的第 0 位开始。请注意,我们使用 1 位十六进制表示法 A/B/../E 来表示第 10/11/../14 位。
第二行描述了输入整数 S 的位。在实际应用中,这通常是一个 32 位有符号整数(例如 C++/大多数其他编程语言中的 int)。有时,这是一个 64 位有符号整数(例如 C++ 中的 long long)。对于此可视化,我们将 S 限制为 16 位有符号整数。
第三行描述了将应用于 S 的 (位)掩码 的位以及相关的按位操作。
最后一行描述了结果。
Pro-tip 1: Since you are not logged-in, you may be a first time visitor (or not an NUS student) who are not aware of the following keyboard shortcuts to navigate this e-Lecture mode: [PageDown]/[PageUp] to go to the next/previous slide, respectively, (and if the drop-down box is highlighted, you can also use [→ or ↓/← or ↑] to do the same),and [Esc] to toggle between this e-Lecture mode and exploration mode.
- 设置 S 的值
- 将第 j 位设为 on
- 判断第 j 位的值
- 将第 j 位设为 off
- 对第 j 位取反
- 最低有效位
Pro-tip 2: We designed this visualization and this e-Lecture mode to look good on 1366x768 resolution or larger (typical modern laptop resolution in 2021). We recommend using Google Chrome to access VisuAlgo. Go to full screen mode (F11) to enjoy this setup. However, you can use zoom-in (Ctrl +) or zoom-out (Ctrl -) to calibrate this.
Pro-tip 3: Other than using the typical media UI at the bottom of the page, you can also control the animation playback using keyboard shortcuts (in Exploration Mode): Spacebar to play/pause/replay the animation, ←/→ to step the animation backwards/forwards, respectively, and -/+ to decrease/increase the animation speed, respectively.
有关位掩码/位操作的源代码示例,请查看:bit_manipulation.cpp | py | java | ml。
要测试您对位操作的理解,请尝试我们的位掩码主题的在线测验。
而对于涉及位掩码/位操作的更具挑战性的问题,请尝试以下在线评测问题:UVa 11933 - 分割数字 和 Kattis - bitbybit。
除了这些简单的应用之外,位掩码还经常用作一些高级算法中的低级优化,所以当您在更大的算法中遇到位掩码时,请做好准备。
You have reached the last slide. Return to 'Exploration Mode' to start exploring!
Note that if you notice any bug in this visualization or if you want to request for a new visualization feature, do not hesitate to drop an email to the project leader: Dr Steven Halim via his email address: stevenhalim at gmail dot com.
Increment
设置 S
将第 j 位设为 on
判断第 j 位的值
将第 j 位设为 off
对第 j 位取反
最低有效位