Java位运算
1、原码、反码、补码之间的转换
计算机存储都是按补码进行存储的,正数的补码和原码一样,对负数进行位运算的时候要先算出它的补码。
1.1正数的原码、反码、补码都是相同的。
1.2 负数的反码:最高位符号位不变,其他位置取反
负数的补码:反码加1就得到补码
2.位运算
&:按位与
0&1 = 0
0&0 = 0
1&1 = 1
例子: 5 & 9 = 1
| :按位或
0 | 0 = 0
1 | 0 = 1
1 | 1 = 1
例子:5 ^ 9 = 12
^ : 按位异或
0^0 = 0
1^1 = 0
0^1 = 1
相同异或为0,不同异或为1 ,所以用0去异或其他的数x得到x本身。
~ :按位非
按位非首先获取补码,对齐位置全部取反包括符号位
如果原来的数是正数,得到补码后是负数,负数要先减1得到反码,反码再除符号位其余全部取反得到负数的最终的原码
如果原来的数是负数,得到补码后直接就是最后的正数。不用再求反码
左移运算:前面溢出的直接去除,后面空出来的补零!
正数直接左移:
负数先算出补码再左移,左移运算完了后,再减1,除符号位外其他位进行取反!
>> 右移运算:后面溢出的直接去除,前面空出来的补符号位,正数补0,负数补1.
>>> 无符号右移 :后面溢出的直接去除,前面空出来的直接补0,正数负数都补0,所以无符号右移后的结果都是正数。
参考文献:https://blog.csdn.net/xiaoxiaole0313/article/details/103707926

浙公网安备 33010602011771号