位运算计算器

输入两个数值并选择运算,即可看到十进制、十六进制和二进制的结果,以及每一步的位。所选的位宽决定哪些位存在,因此“非”运算和移位给出的结果与计算机相同。

免费 在浏览器中运行 核对于2026年11月10日星期二

要运算的数,按“数制”中选择的进制输入。负的十进制数以二进制补码保存。

只由与、或、异或、与非和或非使用。

数制

结果

十六进制 — 带 0x 前缀的结果。
十进制(无符号) —
十进制(二进制补码) — 同样的位,按有符号数读取。
二进制 —
检查 — 说明每个数值是否适合该位宽。
逐位显示

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 在“第一个数值(A)”中输入第一个数,若运算需要,在“第二个数值(B)”中输入第二个数。
  2. 选择输入数值所用的“数制”,以及“运算”。
  3. 进行移位或循环时,设置“移位或循环的位数”。选择结果应有的“位宽”。
  4. 阅读“十六进制”、“十进制(无符号)”和“二进制”的结果,以及其下方的逐位表格。

逻辑运算

0xCA AND 0x0F = 11001010 AND 00001111 = 00001010 = 0x0A
  • 与:只有两位都为1时结果为1。可用来保留某些位、清除其他位。
  • 或:任一位为1时结果为1。可用来置位。
  • 异或:恰有一位为1时结果为1。对同一个异或连做两次,即回到原值。
  • 与非和或非是先与、先或再取非。非运算在位宽之内翻转每一位。

移位与循环

左移把每一位向上移动一位,底部补零;从顶端移出的位会丢失。逻辑右移把每一位向下移动,顶部补零。算术右移在顶部补上符号位的副本,因此负数仍然为负。循环则把从一端移出的位放回另一端。

0xCA shifted left by 1 = 10010100 (0x94); logical right = 01100101 (0x65); arithmetic right = 11100101 (0xE5); rotate left = 10010101 (0x95)

位宽很重要

在8位中,0的非为 0xFF;在16位中为 0xFFFF;在32位中为 0xFFFFFFFF,因为结果的位数与位宽相同。若某数值所需的位数超过位宽,它不会被完整保存:工具只使用其最低位,并以红色显示“检查”一行。

本工具不涵盖的内容

  • 各语言的差异。JavaScript 的位运算符把操作数转换为32位整数,因此无法显示64位结果。本工具用 BigInt 显示所选位宽的位,使64位数值精确无误。
  • 结构体中的位域、字节顺序和文件格式:这些请参阅 十六进制查看器。

计算示例:8位下的 0xCA 与 0x0F

在第一个数值中输入 CA,第二个输入 0F,“数制”设为十六进制,“位宽”设为8位。结果为00001010,即十六进制 0x0A,十进制10。只有两个数在同一位置都为1的位保留下来:共两位,都在 0F 所保留的低四位之中。

结果 数值
十六进制 0x0A
二进制 0b0000 1010
十进制(无符号) 10

常见问题

逻辑右移与算术右移有什么区别?

两者都使各位向下移动一位。逻辑移位在顶部补零,因此把数值当作无符号数。算术移位复制符号位,因此负数仍为负:0xCA 即 −54,右移一位后为 −27(0xE5)。

为什么“非”运算在不同位宽下结果不同?

非运算翻转位宽内的每一位。在8位中0为00000000,因此非运算得到11111111(0xFF);在32位中0有32位,因此非运算得到 0xFFFFFFFF。同一个数在不同位宽下位数不同。

循环与移位有什么不同?

移位会丢失从一端移出的位。循环则把它们放回另一端,因此没有任何位丢失。循环的位数等于位宽时,得到的仍是原来的数值。

为什么数值超出位宽时会被标记?

需要比位宽更多位的数值无法被完整保存。工具只使用最低的位,因此300在8位中变为44,“检查”一行会说明发生了什么,以免把结果当作您输入的数值。

我可以用空格输入二进制数吗?

可以。空格和下划线会被忽略,因此1100 1010与11001010是同一个数值。十六进制可以带 0x 前缀,二进制可以带 0b 前缀。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。