带明确位宽的位运算
位运算针对对应位工作:AND 只保留双方都为 1 的位,OR 保留任一方为 1 的位,XOR 保留不同的位,NOT 翻转所有位,移位则把整个位模式向左或向右移动。它们常用于掩码、标志、权限、颜色通道、协议字段和系统编程。
位宽不能省略。8 位下 NOT 00000000 是 11111111,16 位下则是 16 个 1。左移可能丢弃高位,有符号右移可能复制符号位。本工具要求明确 8/16/32/64 位,并把结果掩码到该宽度,同时显示有符号和无符号解释。
使用方法
在解释操作数之前先确定位宽和符号语义。
- 选择 AND、OR、XOR、NOT、左移或右移。
- 选择十进制、二进制或十六进制输入格式。
- 选择无符号或有符号补码语义,再选择 8、16、32 或 64 位。
- 输入 A;二元运算输入 B,移位输入非负十进制位数,NOT 只使用 A。
- 点击“计算”,对照位串、十六进制和两种十进制结果。
位运算示例
以下使用 8 位,便于观察掩码和符号扩展。
| 运算 | 结果位串 | 说明 |
|---|---|---|
| 10101010 AND 11001100 | 10001000 | 只有双方都为 1 的位置保留。 |
| 10101010 OR 11001100 | 11101110 | 任一输入为 1 的位置都会置 1。 |
| 10101010 XOR 11001100 | 01100110 | 两个输入不同的位置置 1。 |
| NOT 00001111 | 11110000 | 在 8 位掩码内翻转每一位。 |
| 10000001 << 1 | 00000010 | 最高位被丢弃,右侧补 0。 |
| 11111110 >> 1 | 有符号 11111111 / 无符号 01111111 | 算术右移扩展符号位,逻辑右移左侧补 0。 |
输入格式与语义
十进制模式按所选符号语义校验范围。8 位无符号范围是 0 到 255,有符号范围是 -128 到 127。二进制和十六进制被视为原始非负位模式,必须能放入所选位宽;符号设置主要影响结果解释和右移方式。
移位数量始终是非负十进制整数。左移会丢弃越过位宽的高位并在右侧补 0;无符号右移左侧补 0;有符号右移先按补码解释 A,再复制符号位。
- 二进制支持 0b 前缀、空格和下划线。
- 十六进制支持 0x 前缀,结果会补足到所选宽度。
- AND/OR/XOR 对原始位模式相同,符号只改变十进制解释。
- 移位数大于等于位宽时,左移和逻辑右移为 0;负数算术右移最终保持全 1。
掩码和移位算法
操作数先转换为 0 到 2ⁿ-1 的无符号 BigInt 位模式。AND、OR、XOR 直接组合模式;NOT 先翻转,再应用 n 位掩码。
左移后应用掩码以模拟高位截断。逻辑右移使用无符号模式;算术右移先把最高位为 1 的模式解释成负数,再执行符号扩展。
最终始终显示恰好 n 位二进制、n/4 位十六进制,以及有符号和无符号十进制。
实际用途
当独立位或位字段具有不同含义时,位运算最有价值。
掩码与标志
检查权限或功能位,使用 OR 合并选项、AND 清除字段、XOR 切换位。
解析协议字段
拆分头部、状态字、设备寄存器和二进制文件字段。
颜色与通道
提取或组合 RGB/ARGB 通道,并核对字节移位位置。
测试系统代码
为固件、解析器、哈希和跨语言移位行为生成参考值。
常见错误与边界
结果异常通常来自位宽或有符号语义与目标系统不一致。
忘记位宽
普通数学整数没有自然最高位,NOT 和左移必须依据寄存器或协议宽度。
混淆算术和逻辑右移
负数算术右移补 1,无符号逻辑右移补 0。
给二进制输入加负号
二进制和十六进制表示原始位模式;数学负数请使用有符号十进制模式。
把移位当循环移位
本工具不旋转,移出的位会丢弃,不会从另一端回来。
与相关工具的区别
位运算在明确宽度内改变模式,不同于普通算术和进制改写。
二进制计算器
加法和乘法会产生进位;AND、OR、XOR 各位独立。
二进制补码
补码工具解释单个位模式,本页在有符号输入和算术右移时使用该解释。
进制转换器
进制转换保持数值,掩码和移位可能改变数值并丢弃高位。
IEEE-754
浮点位包含结构化字段,直接整数位运算会改变编码后的浮点值。