java位运算主要是用来对二进制进行操作,主要的位运算包括>>,<<,>>>,&,|,^,~ .java的二进制是采用补码(最高阶0表示正 ,1表示负,对正数来说,最高位为0,其余各位代表数值本身,如 +22的补码 为00010110。 对负数而言最高位1,把该数绝对值的补码按位取反 然后对整个数加1,即得该数的补码,如 -22的补 码 为11101010(00010110 按位取反11101001 +1=11101010))的方式进行表示.
1, >> 右移(带符号【移动的时候带上原来的符号】)
a>>b 表示a向右移动b位,低阶去掉,高阶用原来最高阶补充(即如果原来最高位0,则高位补0),
例如: 12>>2 即00001100--->00000011(3)
-12>>2 即11110100--->11111101(-3)
2, << 左移(带符号)
a<<b 表示a向左移动b位,高阶去掉,低阶用0补充。
例如: 12<<2 即00001100--->00110000(48)
-12<<2 即11110100--->11010000(-48)
3, >>> 右移(无符号【移动的时候不带上原来的符号】)
由于>>>是无符号的,所以每次移动最高位用0表示,所以>>>结果一定是正数(除0),即正数的>>>跟>>结果是一样的
例如: 12>>>2 即00001100--->00000011(3)
-12>>>2 即11110100--->00111101 (1073741821)
4, & 按位与
如果两个运算数都是1,则结果为1。其他情况下,结果均为零
例如:01010001&11000011结果为:01000001
5,| 按位或
任何一个运算数为1,则结果为1
例如:01010001|11000011结果为: 11010011
6, ^ 按位异或
只有在两个比较的位不同时其结果是 1。否则,结果是零
例如:01010001|11000011结果为: 10010010
7, ~ 按位非
是对其运算数的每一位取反
~01010001 结果为:10101110
备注:操作的数据为byte类型,在内存占一个字节即8位2进制数表示