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

 

posted @ 2021-04-25 13:47  蚂蚁上树025  阅读(59)  评论(0)    收藏  举报