开发者工具 · 硬件 / 嵌入

位运算可视化

AND/OR/XOR/移位实时可视化

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 52 次使用
AND / OR / XOR / 移位 · 逐位对照 · 点击翻转 · 全本地
位宽 运算 位移量 n
Aoperand A
Boperand B
Aoperand
Boperand
A & Bresult
A 置位(1) B 置位(1) 清零(0) 单击 A / B 任一位 翻转 该位,结果实时联动
结果result · 多进制
位技巧bit tricks · 对当前 A 演算
点上方任一按钮,对当前 A(及位移量 n)演示该位技巧。
就绪 · 输入 A / B,选择运算与位宽
第一节

关于本工具

About

调试一段位运算逻辑,在纸上手算 AND、OR、XOR 和移位结果,一旦位数一多就容易错位。这个工具把输入的两个二进制数实时映射成位对齐的可视化条块,每个位上的运算结果用颜色区分,鼠标悬停还能看到该位的十进制值。所有计算在浏览器本地完成,不向服务器发送任何数据——适合嵌入式开发、底层算法验证或计算机组成原理学习时快速对照。

使用场景

调试网络子网掩码

网络工程师在配置 VLAN 时,需要手工计算子网掩码对应的二进制前缀长度。例如,255.255.255.240 到底对应 /28 还是 /29?在纸上反复换算容易出错。把掩码逐字节转成二进制,用本工具做 AND 运算,一眼看出网络地址和被借用的主机位,不用再靠死记硬背子网掩码表。

验证权限码组合

Linux 系统管理员要为用户分配 755 权限,手算时总把 rwx 对应的 4+2+1 搞混,尤其遇到 770 和 775 的区别。把权限位的二进制值(rwx=111, r-x=101)输入做 OR 运算,能直观验证最终权限码是否覆盖了所有需要的读、写、执行位,避免因权限不足导致服务启动失败。

检查 IP 地址归属

运维排查日志时,发现一条来源 IP 10.0.1.55 的异常请求。需要判断它是否属于 10.0.1.0/24 网段。手动将 IP 和掩码转二进制做 AND 运算容易算错。把 IP 和掩码输入本工具做 AND,结果与网段地址对比,几秒内确认该 IP 是否在子网范围内,避免误封或漏封。

校验 CRC 校验和

嵌入式开发者在编写通信协议时,需要快速验证一个 8 位 CRC 计算是否正确。手算 XOR 时,高位对齐和逐位异或容易漏位或错位。用本工具对两个十六进制数做 XOR 运算,能逐位核对中间结果,比纸上演算快三倍,且能发现因进位错误导致的校验和偏差。

理解 RGB 颜色通道

前端新手在调色时,看到十六进制色值 #FF8800,想知道它拆成红、绿、蓝各是多少。手动将 FF 和 88 转二进制再移位很麻烦。用本工具的移位功能,把 0xFF8800 右移 16 位得到 0xFF(红),再右移 8 位并做 AND 0xFF 得到 0x88(绿),可视化地拆解颜色通道,比查颜色表更理解原理。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「操作数 A」和「操作数 B」输入框中键入整数(支持十进制和十六进制 0x 前缀),下方位图即时更新每个比特的高亮状态
  2. 2点击 AND / OR / XOR / 左移 / 右移 按钮选择运算类型,结果区同步显示十进制结果和二进制位图
  3. 3在结果位图上悬停任意比特位,浮层提示该位的权重值(如 2^3=8),辅助理解位运算的逐位逻辑

输入输出示例

输入输出说明
十进制 5(二进制 0101) AND 十进制 3(二进制 0011)0001(十进制 1)常规:验证 AND 运算的基本逻辑,只有对应位都是 1 结果才为 1
十进制 5(二进制 0101) OR 十进制 3(二进制 0011)0111(十进制 7)常规:验证 OR 运算,任一操作数对应位为 1 结果即为 1
十进制 5(二进制 0101) XOR 十进制 3(二进制 0011)0110(十进制 6)常规:验证 XOR 运算,对应位相异结果为 1,相同为 0
十进制 8(二进制 1000) 左移 2 位100000(十进制 32)常规:左移 n 位等效于乘以 2^n,验证移位运算的数值变化
十进制 0(二进制 0000) AND 十进制 15(二进制 1111)0000(十进制 0)边界:任何数与 0 进行 AND 运算结果恒为 0,验证零值的处理
十进制 255(二进制 11111111) 右移 8 位00000000(十进制 0)边界:移位位数等于操作数位数时结果归零,验证移位范围边界
十进制 -1(补码表示 11111111) AND 十进制 1(二进制 00000001)00000001(十进制 1)易错:负数在计算机中以补码存储,AND 运算时需注意符号位的处理
十进制 10(二进制 1010) XOR 十进制 10(二进制 1010)0000(十进制 0)易错:相同数值 XOR 结果为 0,常用于寄存器清零,验证自反性

常见错误对照

1.移位操作中负数右移的符号位处理

✗ 错误对 -8(二进制 11111000)执行 >> 2,期望得到 11111110(-2)
✓ 修复对 -8 执行 >>> 2(无符号右移),得到 00111110(62)

JavaScript 中 >> 是算术右移,保留符号位(高位补1);>>> 是逻辑右移,高位补0。位运算可视化工具默认使用 >>>,若用 >> 需明确标注。

2.AND 运算误用于判断奇偶时忽略负数

✗ 错误判断 -3 是否为奇数:-3 & 1 得到 1,认为奇数
✓ 修复判断 -3 是否为奇数:(-3 & 1) === 1 在二进制补码下成立,但应使用 (-3 % 2) !== 0 更直观

位运算对负数按补码处理,-3 补码为 ...11101,&1 得 1,逻辑上正确但易误解。工具中负数以补码显示,需注意符号位。

3.XOR 运算误以为可逆加密

✗ 错误用 XOR 对字符串 'abc' 加密,key 为 0xFF,认为结果不可逆
✓ 修复XOR 加密是流密码基础,但必须密钥不重复使用;同一 key 对同一数据 XOR 两次即还原

XOR 性质:a XOR b XOR b = a。工具中演示 XOR 时,输入相同操作数两次会回到原值,说明其可逆性,并非安全加密。

4.移位运算中移位量超过位数宽度

✗ 错误对 32 位整数 1 执行 << 32,期望得到 0
✓ 修复对 32 位整数 1 执行 << 32,实际得到 1(因为移位量被截断为 32 mod 32 = 0)

JavaScript 中移位操作只取低 5 位(32 位整数)或低 6 位(64 位),超过宽度的移位量会被模运算。工具输入 33 位时需注意。

5.NOT 运算误以为结果是简单取反

✗ 错误对 5(二进制 101)执行 ~5,期望得到 2(010)
✓ 修复~5 得到 -6(二进制补码 11111010)

~ 是按位取反,包括符号位。5 的 32 位表示为 00000000...00000101,取反得 11111111...11111010,即 -6。工具显示十进制和二进制补码。

6.十六进制输入未加 0x 前缀

✗ 错误输入 A5 作为十六进制数,工具解析为十进制 10 和 5
✓ 修复输入 0xA5 作为十六进制数,工具解析为 165

工具输入框默认按十进制解析,十六进制需加 0x 前缀。不加前缀时字母被当作变量名或无效字符。

7.二进制输入包含空格或分隔符

✗ 错误输入 1010 0011(中间有空格),工具报错或只解析前半段
✓ 修复输入 10100011(无空格)或 0b10100011(带前缀)

工具输入要求连续数字串,空格、逗号等分隔符不被识别。二进制前缀 0b 可选但推荐使用以明确进制。

8.AND/OR 运算误用于逻辑判断

✗ 错误用 5 & 2 判断 5 是否大于 2,得到 0 认为不成立
✓ 修复用 5 > 2 得到 true

位运算 AND 是逐位比较,5 & 2 = 0 仅表示二进制 101 与 010 无共同位,与数值大小无关。逻辑比较应使用 > < 等运算符。

第三节

工作原理

How It Works

核心公式

a XOR b = (a ∧ ¬b) ∨ (¬a ∧ b)

变量说明

  • a第一个操作数,二进制位
  • b第二个操作数,二进制位
  • 按位与(AND)运算
  • 按位或(OR)运算
  • ¬按位非(NOT)运算

示例

a = 5(二进制 0101),b = 3(二进制 0011):先计算 ¬a = 1010,¬b = 1100;再计算 a∧¬b = 0101∧1010 = 0000,¬a∧b = 1010∧0011 = 0010;最后 OR 得 0000∨0010 = 0010(十进制 2)。工具实时显示每位运算过程,最终输出 5 XOR 3 = 2。

输入两个整数(十进制 / 十六进制)选择运算类型AND / OR / XOR / 移位实时位运算逐位计算并更新可视化展示二进制位图 + 结果交互调整修改数值 / 切换运算即时反馈无刷新重新计算
用户输入 / 展示 交互与选择 计算与反馈
第五节

常见问题

Q & A
这个位运算工具支持负数吗?比如 -5 转二进制?

支持。负数在计算机中用补码表示,本工具对负数输入会显示其补码形式(通常是 32 位有符号整数)。例如输入 -5,二进制结果会显示为 11111111111111111111111111111011。如果预期的是无符号解释,可以手动将结果视为无符号整数重新计算。

为什么我算 AND 得到的结果和手算不一样?

常见原因是位数对齐问题。本工具默认按 32 位整数处理,如果输入的是 0b101(3 位)和 0b11001(5 位),工具会自动补齐前导零。你手算时如果只对齐低位,高位未对齐就会不一致。建议在输入框内直接写十进制或完整二进制(如 0b00000101),工具会显示每一步按位对齐的过程,便于核对。

左移和右移在数学上等于乘 2 和除 2 吗?什么时候不成立?

左移 n 位在数学上等于乘以 2^n,前提是不发生溢出。比如 1 << 31 在 32 位整数下结果是 -2147483648(符号位被占据),不是 2^31。右移分逻辑右移(>>>)和算术右移(>>):算术右移保留符号位,负数右移不会变成正数;逻辑右移高位补 0。本工具默认是算术右移,移位时留意符号位变化。

XOR 可以用来交换两个数吗?怎么操作?

可以,这是经典技巧:a = a ^ b; b = a ^ b; a = a ^ b。用本工具可以一步步验证:先输入 a 和 b 的二进制,算 a ^ b 得到中间值,再分别与另一个数异或,最后两个数互换。注意这个技巧只对整数有效,且 a 和 b 变量不能指向同一内存地址(否则会清空为 0)。

我输入 0x1F 这种十六进制,工具能识别吗?

目前输入框只接受十进制整数。十六进制或二进制值需要手动转换为十进制再输入。例如 0x1F = 31,0b11111 = 31。如果经常需要十六进制转二进制做位运算,可以先用站内「进制转换」工具转换后再过来。后续版本会考虑增加进制输入支持。

结果区显示的是 32 位,但我只需要 8 位怎么办?

本工具固定按 32 位整数展示,但实际运算只用到输入值的有效位。如果只关心低 8 位,可以只看结果二进制字符串的最后 8 位(最右侧)。例如输入 255(0b11111111),结果高位全是 0,直接看低 8 位即可。对于移位操作,如果只处理 8 位数据,建议先用 & 0xFF 掩码截断。

这个工具要联网吗?能不能离线用?

完全不需要联网,所有运算在浏览器内实时执行,输入即出结果。页面加载完成后断网也能正常使用。因为实现方式是纯前端(FE),没有后端请求,也不会上传任何输入数据到服务器。适合在离线环境或内网开发机中使用。

为什么我算 NOT 操作,结果和数学上取反不一样?

按位 NOT(~)是对所有位取反,包括符号位。在 32 位整数下,~5 的结果是 -6(二进制 11111111111111111111111111111010),而不是数学上的 -5。这是因为补码表示下,~x = -x - 1。如果预期是只对低几位取反(如 8 位),需要用掩码:~x & 0xFF。本工具的结果区显示完整 32 位,可以结合掩码手动计算。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭