什么是按位或计算器?
这款计算器用于计算两个整数的按位或(bitwise OR)运算,在大多数编程语言中写作 a | b。或运算会将两个数字逐位(bit by bit)进行比较:只要对应位中任意一个(或两个都)为 1,结果该位就是 1;只有当两位都为 0 时,结果才为 0。
如何使用
输入第一个整数(A)和第二个整数(B),即可读取十进制结果。正整数和负整数均支持。计算器的输入和输出都以十进制(base 10)显示,但内部会将每个数值转换为对应的二进制表示来进行运算。
公式详解
运算按位进行,遵循或运算真值表:\(0|0=0\)、\(0|1=1\)、\(1|0=1\)、\(1|1=1\)。运算公式为:
$$\text{Result} = \text{A} \mathbin{|} \text{B}$$举个例子,取 A = 12、B = 10。换成二进制,12 = 1100,10 = 1010。把它们对齐后逐列进行或运算,得到 1110,对应十进制的 14。因此 \(12 \mathbin{|} 10 = 14\)。
实例演示
假设要计算 \(5 \mathbin{|} 3\)。二进制中,5 = 101,3 = 011。逐位进行或运算:\(1|0=1\)、\(0|1=1\)、\(1|1=1\),得到 111 = 7。计算器返回结果 7。
常见按位或值参考
下面的表格给出了从0到8的所有小操作数对的 \(A \mathbin{|} B\)。读取A的行和B的列;单元格是十进制结果。
| | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 1 | 1 | 1 | 3 | 3 | 5 | 5 | 7 | 7 | 9 |
| 2 | 2 | 3 | 2 | 3 | 6 | 7 | 6 | 7 | 10 |
| 3 | 3 | 3 | 3 | 3 | 7 | 7 | 7 | 7 | 11 |
| 4 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 12 |
| 5 | 5 | 5 | 7 | 7 | 5 | 5 | 7 | 7 | 13 |
| 6 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 14 |
| 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 15 |
| 8 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 8 |
对角线(A = B的地方)总是返回操作数本身,因为 x | x = x。
按位或是组合权限标志的标准方法。常见的Unix风格权限位为读取 = 4(100)、写入 = 2(010)、执行 = 1(001):
| 组合 | 表达式 | 十进制 | 二进制 |
|---|---|---|---|
| 读取 + 写入 | 4 | 2 | 6 | 110 |
| 读取 + 执行 | 4 | 1 | 5 | 101 |
| 写入 + 执行 | 2 | 1 | 3 | 011 |
| 读取 + 写入 + 执行 (rwx) | 4 | 2 | 1 | 7 | 111 |
| 两个字节合并 | 240 | 15 | 255 | 11111111 |
关键术语
- 位
-
最小的数字数据单位,持有单个二进制值为
0或1。8个位组成一个字节。 - 设置 / 未设置位
-
设置位的值为
1;未设置(或清除)位的值为0。按位或通常用于设置特定位,而不影响其他位。 - 位掩码
- 一个整数,其位模式被选择用于选择、设置或清除另一个值中的特定位。使用掩码对值进行或运算会强制掩码中设置的每一位在结果中也被设置。
- 标志
-
单个位(通常被赋予一个命名常数),用于表示开/关设置。多个标志被压缩到一个整数中,并用或组合,例如
READ | WRITE。 - 二的补码
-
计算机表示有符号整数的标准方式。最有效位具有负权重,因此
n位数的范围从 \(-2^{n-1}\) 到 \(2^{n-1}-1\)。例如,\(-1\) 存储为所有1位。 - 最高有效位 / 最低有效位 (MSB / LSB)
- MSB是最左边的位,具有最大的位置值(在二的补码中还带有符号);LSB是最右边的位,位置值为 \(2^0 = 1\)。
- 十进制 vs 二进制
- 十进制(十进制)是日常使用的数字系统,使用数字0–9。二进制(二进制)仅使用0和1,每个位置的值都是2的幂。按位操作作用于二进制表示,而此计算器以十进制显示结果。
常见问题
按位或和加法是一回事吗?不是。或运算不会产生进位。\(1|1\) 的结果仍是 1,而 \(1+1\) 在二进制中会进位为 10。只有当两个操作数没有重叠的「为 1」位时,二者的结果才会相同。
负数怎么处理?负整数采用二进制补码(two's complement)表示,因此对负数做或运算时,符号位同样遵循相同的逐位规则。
按位或有什么用?或运算常用于将特定位置 1(打开某些位)或合并标志值(flag),例如把多个权限掩码(permission mask)合并成一个。