这篇文章上次修改于 2406 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
Java 位运算
| 或
规律
两个操作数对应位有一个为 1 时,结果就为 1,否则为 0.
示例
1100 0011
0100 1001
1100 1011
& 与
规律
只有两个操作数对应位同为 1 时,结果为 1,否则为 0.
示例
1100 0011
0100 1001
0100 0001
^ 异或
规律
两个操作数对应位相同时,结果为 0,否则为 1.
示例
1100 0011
0100 1001
1000 1010
~ 非
规律
所有位取反,数值为 1 时,结果为 0,数值为 0 时,结果为 1.
示例
1100 0011
0011 1100
>> 右位移
规律
所有位向右移一位,左边补符号位(正数补 0,负数补 1)
示例
//负数原码
1100 0011
//先求补码
1011 1101
//右移一位
1101 1110
//再取补码 再回到原码
1010 0010
补码的补码为原码
>>> 无符号右移
规律
所有位向右移一位,左边补 0
示例
//负数原码
1010 0011
//先求补码
1101 1101
//右移一位
0110 1110
//再取补码 再回到原码
0001 0010
此处示例只是说内存有 8 bit,如果按 int 4 字节 32 bit 来算的话,无符号右移的值会瞬间变得很大,可以自己试着理解一下
<< 左位移
规律
所有位向左移一位,右边补 0
示例
1100 0011
1000 0110
小结
我们总结一下这篇文章的要点
- 计算机在执行运算的时候都是先将数值转换成补码然后再运算的
- 补码的补码是原码
| & ~ 与我们 Java 中的逻辑运算符有点类似可以对应理解
附一张 Java 运算符优先级的图(在百度找的)
没有评论