UnitConv
位运算

位运算计算器

对 32 位整数进行 AND、OR、XOR、NOT 和位移,并提供逐位可视化

操作数

操作数 A
操作数 B

运算

结果

12 & 10
十进制8
无符号8
十六进制0x00000008
二进制00000000000000000000000000001000

结果的 32 位表示

0
31
0
30
0
29
0
28
0
27
0
26
0
25
0
24
0
23
0
22
0
21
0
20
0
19
0
18
0
17
0
16
0
15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
1
3
0
2
0
1
0
0
MSB (bit 31)LSB (bit 0)

数值按 32 位整数处理。有符号十进制将最高位视为符号(二进制补码);无符号十进制将全部 32 位读作正的数值。右移为逻辑移位(从左侧补零)。

关于此工具

位运算计算器让开发者和计算机科学专业的学生对两个整数计算 AND、OR、XOR、NOT 以及左右位移。将每个操作数以二进制、十进制或十六进制输入,结果会同时在三种进制中显示,并附带实时的 32 位图,让你清楚看到哪些位发生了变化。它适用于调试标志位和位掩码、处理权限、打包数据,以及学习计算机在最底层如何操作比特。

使用方法

  1. 1 输入操作数 A 并选择其进制(二进制、十进制或十六进制)。
  2. 2 选择一种运算:AND、OR、XOR、左移/右移,或一元的 NOT。
  3. 3 双操作数运算请输入操作数 B;移位运算请输入移动多少位。
  4. 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 转换器,颜色掩码可试试颜色代码转换器。