java的位运算符主要针对二进制数的位进行逻辑运算,主要包括以下几种的位运算符
1、与运算符(&)
与运算符的使用规律是两个操作数中位为1的时候结果为1,否则都是0,例如 3&5=1
3对应的二进制数是0011 5对应的二进制数是0101,所以根据与运算的规则,3&5得出的结果是0001,转换成十进制就是1
2、或运算符(|)
或运算符的的使用规则是两个位中只要任意一个里面有一,那么结果为1,也就是说只有当两个位都为0的时候结果才为0,例如 3|5=7
根据或运算符的规则,3|5的记过是0111,转换成十进制就是 7
3、非运算符(~)
非运算符是针对一个数进行操作的,它的使用规则是将一个数的二进制数全部取反,0变成1,1变成0,例如 ~5=-6
5对应二进制数是0101,因为计算机内部表示数的字节单位是定长的,如8、16、32 位,不够的0补位。所以5对应的二进制数应该是 0000 0101,
~5 = 1111 1010,最高是符号位,所以1111 1010代表的是个负数,先将1111 1010 减1 变成1111 1001 ,再取反变成 0000 0110=6,所以~5=-6
4、异或运算符(^)
异或运算符的使用规则是两个操作数的位中,相同为0,不同为1,所以3(0010)^5(0101)=7(0111)
5、左移运算符(<<)
左移运算符是针对一个数进行操作的,运算规则是将一个数的二进制数整体向左移,末尾用0补上,所以 5 << 1 = 10 5 << 2 = 20
5对应的二进制是0101,左移一位就变成了 1010=10 左移两位就变成了 0001 0100 = 20,所以左移多少位就是把原来的数乘以2的多少次方
6、右移运算符(>>)
右运算符与左运算符相反,是将一个数的二进制数整体右移,例如 5>>1 = 2,5对应的二进制数是0101,右移一位就变成了0010=2,当数的本身小于2的n次方的时候,右移n位结果都是0,例如5<2*2*2,所以5 >>3 = 0
7、又移运算符(>>>)
>>>运算符和>>的使用规则基本一样,但是>>>运算符左后最高位都是用0标识