使用方法
- 在“第一个数值(A)”中输入第一个数,若运算需要,在“第二个数值(B)”中输入第二个数。
- 选择输入数值所用的“数制”,以及“运算”。
- 进行移位或循环时,设置“移位或循环的位数”。选择结果应有的“位宽”。
- 阅读“十六进制”、“十进制(无符号)”和“二进制”的结果,以及其下方的逐位表格。
逻辑运算
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日星期二。