了解位运算符之前首先要了解二进制。
&(按位与),|(按位或),^(按位异或),~(按位反转),<< (按位左移),>>(按位右移)
按位与 : & ----------(同为1,才是1)
5&3 = 1 ---------- ------> 101 011 ==> 001 相同位仅为个位1 ,故结果为 1
5&5 = 5 -----------> 101 101 ==>101 同为1时才是1,故结果为5
按位或 :| ----------(一个为1,就为1)
5|3 = 7 ---------- ------> 101 011==>111 出现1的位是 1 1 1,故结果为 111
5|5 = 5 -----------> 101 101 ==>101 一个为1就是1,故结果为5
按位异或 :^ ----------(相同为0,不同为1)
5^3 = 6 ---------- ------> 101 011 ==> 110 对位相加是 1 1 0,故结果为 110
2^2 =0 ------------------> 010 010==>000 对位相同都为0, 故结果为0
比如:a=10, b=100
a的二进制 1010 b的二进制 1100100
a : 0 0 0 1 0 1 0
b : 1 1 0 0 1 0 0
a^b: 1 1 0 1 1 1 0 ----> 110 (异或:相等为0,不等为1)
b : 1 1 0 0 1 0 0
b^a: 0 0 0 1 0 1 0 ---->10
a : 1 1 0 1 1 1 0
a^b: 1 1 0 0 1 0 0 ---->100
按位反转 :~ (将二进制数+1之后乘以-1)
~5 = -6 ---------- ------> ~x = -(x+1),-(101 + 1) = -110
~7 = -(0111+1)= -1000 = -8
按位左移 :<< (向左移动n位然后空位补0)
5<<2 = 20 ---------- ------> 101 向左移动2位得到 10100 ,即右面多出2位用0补
按位右移 :>> (向右移动n位然后空位补0)5>>2 = 1 ---------- ------> 101 向右移动2位得到 001 ,即左边用0补