跳到主内容
UniKit

位运算计算器

对整数做 AND / OR / XOR / NOT、左右移、无符号右移与循环移位,支持 0x / 0b / 0o 与十进制输入、8~64 位位宽,并同时显示十、二、八、十六进制与置位统计。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

运算符
位宽

移位量 ≥ 位宽时结果饱和(左移/无符号右移为 0,算术右移按符号补齐);循环移位量对位宽取模。

结果

十进制(无符号)8
十进制(补码)8
十六进制0x08
八进制0o10
置位统计(1 的个数)1
二进制(每 4 位一组)
0b0000 1000

这个工具能做什么

  • 算权限位掩码:`0b1100 & 0b1010` 得到 0b1000,一眼看出哪些权限位同时打开。
  • 调试协议或寄存器时用 8/16/32/64 位宽对照结果,同时看到无符号值、补码值、十六进制和每 4 位分组的二进制。
  • 检查移位和循环移位:左移溢出会饱和成 0、算术右移按符号位补齐、循环移位量对位宽取模,规则都在页面里写明。
  • 统计置位个数(popcount),用于汉明重量、位图基数或哈希位数的快速核对。

示例

输入

A = 0b1010,B = 0b1100,运算符 AND,位宽 8

输出

十进制(无符号)8 · 十进制(补码)8 · 十六进制 0x08 · 八进制 0o10 · 二进制 00001000 · 每 4 位分组 0000 1000 · 置位统计 1

两个 4 位二进制数按位与后得到 1000,按 8 位位宽补零显示为 00001000。若改成左移 `0xFF << 4`(位宽 8),结果会截断为 240,补码读法是 −16。

常见问题

输入支持哪些进制?

十进制 `255`、十六进制 `0xFF`、二进制 `0b1010`、八进制 `0o17` 都行,可以带正负号,也允许用下划线分组(`0b1010_1010`)。空输入会提示「请输入数字」,写成 `FF` 这类没有前缀的十六进制会被判为非法整数。

NOT 运算为什么需要位宽?

因为按位取反的结果长度取决于位宽:8 位下 `~0x0F` 是 0xF0,32 位下就是 0xFFFFFFF0。工具统一按你选的位宽做掩码,所以位宽选错结果就会看着很奇怪——它并不错,只是位宽不同。

移位量超过位宽会怎样?

饱和处理,不是取模。左移和无符号右移超过位宽得到 0,算术右移按符号位补齐(正数得 0,负数得全 1)。循环移位 ROL/ROR 则是另一种规则:移位量对位宽取模,所以循环左移 8 位在 8 位位宽下等于不动。这和 JavaScript 里 `<<` 只取低 5 位的隐式行为不一样,是有意区分的。

为什么十六进制会补零,八进制却不补?

十六进制按位宽补零到固定宽度(8 位是 2 个十六进制字符、32 位是 8 个),方便逐字节比对;八进制没有对齐到 4 位边界,所以只显示有效数字,形如 0o377。需要固定宽度时看十六进制或二进制列。

负数怎么处理?

输入负数会先按位宽截断成无符号值再参与运算,所以 -1 在 8 位下就是 0xFF。结果同时给出无符号十进制和补码有符号十进制,避免你猜它到底代表几。数值超出 64 位可表示范围会报错。

关键词:bitwise位运算andorxornotshift左移右移循环移位rotatepopcount位宽binaryhex

同类工具