目录
- &(AND)
- |(OR)
- ^(XOR)
- &^(AND NOT)
- << 和 >>
& 位运算 AND
| 位运算 OR
^ 位运算 XOR
&^ 位运算 (AND NOT)
<< 左移
>> 右移
&(AND)
& 运算: 相同位的两个数字都为 1, 则为 1; 若有一个不为 1, 则为 0.
- 0000 0100 4
- 0000 0110 6
- ---------
- 0000 0100 4
- |(OR)
| 运算: 相同位只要一个为 1 即为 1.
- 0000 0100 4
- 0000 0110 6
- ---------
- 0000 0110 6
- ^(XOR)
作为二元运算: 相同位不同则为 1, 相同则为 0.
- 0000 0100 4
- 0000 0110 6
- ---------
- 0000 0010 2
作为一元运算: 按位取反.
涉及知识点, 参考: 博文
所有正整数的按位取反是其本身 + 1 的负数
所有负整数的按位取反是其本身 + 1 的绝对值
零的按位取反是 -1
0000 0100 4 原码
0000 0100 4 补码
1111 1011 4 的补码取反记为 x
1111 1010 x-1 得到反码记为 y
1111 0101 y 取反得到源码, 此为最终结果 -5
&^(AND NOT)
&^ 运算: 位清空运算, 和被运算变量位置有关系. 计算 x&^y 如果 ybit 位上的数是 0 则取 x 上对应位置的值, 如果 ybit 位上为 1 则取结果位上取 0
0000 0100 4 记为 x
0000 0110 6 记为 y
- ---------
- 0000 0000 0
- << 和 >>
<< 运算: a << b 就表示把 a 转为二进制后左移 b 位 (在后面添 b 个 0).
>> 运算: a>> b 表示二进制右移 b 位 (去掉末 b 位), 相当于 a 除以 2 的 b 次方 (取整).
- 0000 0100 4
- 0000 1000 4 <<1 = 8
- 0001 0000 4 << 2 = 16
- 0000 0110 6
- 0000 0011 6>> 1 = 3
- 0000 0001 6>> 2 = 1
来源: http://www.bubuko.com/infodetail-3294699.html