位运算符说明
1,按位与 (&)
按位与运算符比较两个操作数的每一位,只有当两个相应的位都为 1 时,结果的相应位才为 1,否则为 0。以下是按位与的真值表:
假设我们有两个字节,它们的二进制表示如下:
A: 0110 1100
B: 0101 0111
A & B: 0100 0100 (即十进制的 68)
按位或 (|)
按位或运算符比较两个操作数的每一位,只要两个相应的位中至少有一个为 1,那么结果的相应位就为 1;如果两个相应的位都为 0,则结果的相应位为 0。以下是按位或的真值表:
A: 0110 1100
B: 0101 0111
A | B: 0111 1111 (即十进制的 127)
按位异或 (^)
按位异或运算符比较两个操作数的每一位,如果两个相应的位不同,则结果为 1;如果相同,则结果为 0。以下是按位异或的真值表:
A: 0110 1100
B: 0101 0111
A ^ B: 0011 1011 (即十进制的 59)
按位取反 (~)
按位取反运算符将每个位翻转,即 0 变为 1,1 变为 0。它只作用于一个操作数。
A: 0110 1100
~A: 1001 0011 (即十进制的 -109, 注意符号位的影响)
左移 (<<)
左移运算符将操作数的位向左移动指定的数量,右边空出的位置用 0 填充。左边溢出的位会被丢弃。
字节 A: 0000 0001 (即十进制的 1)
A << 3: 0000 1000 (即十进制的 8)
右移 (>>)
右移运算符将操作数的位向右移动指定的数量。对于无符号类型,左边空出的位置用 0 填充;对于有符号类型,左边空出的位置用符号位(最高位)填充,以保持数值的符号不变。
(0000 1000) >> 3: 0000 0001 (即十进制的 1)