位运算模拟器(AND、OR、XOR、NOT、移位)
对两个数值计算 AND、OR、XOR、NOT、左移、右移,并通过二进制网格直观展示每一位的变化。支持 8/16/32 位宽。
什么是位运算
位运算是把数值看作一串二进制数字(0 和 1),逐位进行逻辑运算的操作。AND(与)、OR(或)、XOR(异或)、NOT(取反)、移位(左移、右移)是最具代表性的五种运算,它们都是 CPU 能够直接执行的基础指令,速度远快于加减乘除等算术运算。在编程语言中通常写作 `&`、`|`、`^`、`~`、`<<`、`>>`,广泛应用于标志位管理、权限设计、加密算法、图像处理等场景。
本工具可以指定数值 A、数值 B(NOT 运算只使用数值 A)以及位宽(8/16/32 位),并以网格形式逐位展示运算结果。数值支持十进制输入,也可以使用 `0x`(十六进制)或 `0b`(二进制)前缀,与代码中的写法保持一致。需要注意的是,超出所选位宽的数值无法被正确表示,因此先确定好位宽,再观察结果会更容易理解。
位运算模拟器的使用方法
- 选择位宽 在 8/16/32 位之间选择。不确定时建议先从 8 位开始,网格较小,更容易看清每一位的变化。
- 选择运算类型 在 AND、OR、XOR、NOT、左移、右移中选择。切换为 NOT 时,输入框会自动变为只需一个数值。
- 输入数值 为数值 A(以及 NOT 以外运算所需的数值 B)输入十进制、十六进制(`0x` 前缀)或二进制(`0b` 前缀)数字;若选择移位运算,还需指定移位位数。
- 查看结果网格 结果会自动计算并逐位展示,黄色高亮的位表示相对于原数值发生了变化。
- 对照十进制与十六进制 结果行下方会同时给出十进制、十六进制表示,方便与代码或文档中的数值互相核对。
用好本工具的小技巧
- 数值不仅可以输入十进制,还可以使用 `0x1A` 形式的十六进制或 `0b1010` 形式的二进制前缀,直接照抄代码中的写法即可。
- AND、OR、XOR 需要两个数值,NOT 只需要一个数值。切换运算类型时,输入框数量会自动调整。
- 右移(`>>>`)本工具只支持逻辑移位。它与保留符号位的算术移位有何不同,请参见下方常见问题。
- 将位宽从 8 位切换到 16 位、32 位,可以直观看到同一个数值的高位会补上更多的 0,有助于理解“位宽”的真正含义。
- 黄色高亮的位表示演算前后发生变化的位。使用 AND、OR 时,可以直观追踪哪个输入值在每一位上“胜出”。
位运算模拟器的应用场景
编程学习中的验证
在学习 C、Java、Python 等语言时,NOT 和移位运算往往难以心算,通过可视化网格逐位确认,能更快建立直觉。
位标志与权限系统设计
如 Unix 文件权限、将多个开关状态压缩进一个整数管理的“位标志”设计,可以先在这里试验 AND 掩码提取、OR 置位等操作。
竞赛编程与位掩码算法验证
位掩码动态规划、集合的位表示等技巧,可以先用较小的数值在本工具中验证运算结果是否符合预期。
十六进制与二进制换算核对
在确认运算结果的同时核对进制换算关系,可与站内的进制转换工具配合使用。
颜色代码与网络地址计算
从颜色代码中提取红、绿、蓝分量,或计算 IP 地址与子网掩码的 AND 结果,都是位运算的常见实际用途。
位运算术语表
- AND(与)
- 只有当两个位都为 1 时,结果才为 1,常用于通过掩码提取特定位。
- OR(或)
- 只要有一个位为 1,结果就为 1,常用于置位(把某些位设为 1)。
- XOR(异或)
- 只有当两个位不同时,结果才为 1,常用于翻转某些位、交换数值或检测差异。
- NOT(取反)
- 把一个数值的所有位逐一反转,结果如何表示取决于所选的位宽。
- 移位运算
- 把二进制位模式整体向左或向右移动。左移相当于乘以 2 的幂,右移相当于除以 2。
- 位掩码
- 配合 AND、OR 使用、用来提取或改写特定位的数值,例如 `0b00001111` 可用于提取最低 4 位。
- 位宽
- 表示一个数值所使用的位数。8 位可表示 0~255,16 位可表示 0~65535。
- 二进制 / 十六进制
- 二进制只使用 0 和 1 表示数值,十六进制使用 0~9 和 A~F,常作为二进制数位分组的简洁记法。
常见问题
闲话 ― XOR 的奇妙特性与实际应用
位运算直接对应计算机内部的逻辑电路,是 CPU 能够执行得最快的运算之一,通常只需一个时钟周期。由于所需电路远比乘法、除法简单,性能敏感的场景(图像处理、加密算法、网络协议实现等)长期以来都会用位运算技巧来替代开销更大的算术运算。
XOR(异或)有一些有趣的性质:一个值与自身异或结果恒为 0(`a ^ a = 0`),与 0 异或则结果保持原值不变(`a ^ 0 = a`)。利用这两条性质,可以在不使用临时变量的情况下交换两个变量的值,这就是经典的“异或交换法”(`a ^= b; b ^= a; a ^= b;`)。出于可读性考虑,现代实际项目中已不太推荐使用,但它至今仍是理解位运算特性的经典教学示例。
位掩码在实际系统中应用广泛。Unix 文件权限(读=4、写=2、执行=1)本质上就是位运算的 OR 与 AND;从颜色代码 `#FF0000` 中提取红、绿、蓝各分量,也是通过右移配合 AND 掩码实现的。将多个开关状态压缩进一个整数中管理的“位标志”技巧,也曾在内存有限的旧游戏和系统编程中被广泛使用。