位运算计算器
对 32 位整数进行 AND、OR、XOR、NOT 和位移,并提供逐位可视化
操作数
运算
结果
12 & 10结果的 32 位表示
数值按 32 位整数处理。有符号十进制将最高位视为符号(二进制补码);无符号十进制将全部 32 位读作正的数值。右移为逻辑移位(从左侧补零)。
关于此工具
位运算计算器让开发者和计算机科学专业的学生对两个整数计算 AND、OR、XOR、NOT 以及左右位移。将每个操作数以二进制、十进制或十六进制输入,结果会同时在三种进制中显示,并附带实时的 32 位图,让你清楚看到哪些位发生了变化。它适用于调试标志位和位掩码、处理权限、打包数据,以及学习计算机在最底层如何操作比特。
使用方法
- 1 输入操作数 A 并选择其进制(二进制、十进制或十六进制)。
- 2 选择一种运算:AND、OR、XOR、左移/右移,或一元的 NOT。
- 3 双操作数运算请输入操作数 B;移位运算请输入移动多少位。
- 4 以十进制、无符号、十六进制和二进制查看结果,并观察高亮的位。
工作原理
位运算对 32 位中的每一位独立处理。AND 仅当两个输入位都为 1 时才把结果位置为 1,因此用于掩码(保留)选定的位。OR 在任一输入位为 1 时把结果位置为 1,因此用于打开标志位。XOR 仅当两个输入位不同时才把结果位置为 1,非常适合翻转位和做简单校验和。NOT 是一元运算:它翻转每一位,把 0 变成 1,把 1 变成 0。左移(<<)把所有位向最高位端移动并用零补齐空位,每移动一位就相当于乘以二;逻辑右移(>>)则向相反方向移动并同样补零。由于负数以二进制补码存储,同样的 32 位既可读作有符号值(最高位为符号),也可读作无符号值,因此本工具同时显示两者。例如 12 AND 10 = 8,12 OR 10 = 14,12 XOR 10 = 6,1 << 4 = 16,而 NOT 0 全为 1,即有符号时为 -1,无符号时为 4294967295。
常见问题
AND、OR 和 XOR 有什么区别?
AND 仅在两个操作数都置位时才保留该位,因此用于通过掩码清除或测试位。OR 在任一操作数置位时就置位,因此用于打开位。XOR 仅在恰好一个操作数置位时才置位,可用于翻转位和检测差异。
为什么 NOT 0 既显示 -1 又显示 4294967295?
NOT 翻转全部 32 位,所以 0 变成三十二个 1。把这个位模式读作有符号二进制补码整数时为 -1;读作无符号 32 位整数时为 4294967295。两者描述的是同一组位。
左移或右移实际做了什么?
左移 n 位把每一位向最高位端移动 n 位并补零,相当于乘以 2 的 n 次方。逻辑右移 n 位则向相反方向移动并补零,对非负值相当于除以 2 的 n 次方。
为什么一切都限制在 32 位?
JavaScript 的位运算符和大多数 CPU 的整数寄存器都按 32 位字工作,本工具与之一致。移位量按对 32 取模处理,数值在 32 位范围内回绕,与 C、Java 或 JavaScript 的行为完全相同。
相关工具与用途
若要在二进制、八进制、十进制和十六进制之间转换单个值,请使用进制转换器。字符编码请参见 ASCII 转换器,颜色掩码可试试颜色代码转换器。