位运算
首先要了解二进制,位运算会将十进制的数值转位二进制的数值,然后进行运算。
按位与(&)
3 & 5= 0011 & 0101 = 0001;
3: 0 0 1 1;
& & & &
5: 0 1 0 1;
----------------
1: 0 0 1 0
第一位 0 & 0 得 0
第二位 0 & 1 得 0
第三位 1 & 0 得 0
第四位 1 & 1 得 1
组合起来就是0001;
到这里我想细心的同学已经发现了其中的规则,就是将二进制的每一位进行比较,如果两个数字都等于1的情况下,那么对应的位置就为1,否则等于0
按位或(|)
两个二进制位数进行按位或运算,只要其中一位为1,则运算结果就为1
3 | 5 = 0011 | 0101 = 0111 =7
3: 0 0 1 1;
& & & &
5: 0 1 0 1;
----------------
7: 0 1 1 1
异或运算符(^)
异或运算过程中,两个位置如果同为1的情况下等于0;其中一位等于1的情况下等于1
3 ^ 5 = 0011 ^ 0101 = 0110 = 6
3: 0 0 1 1;
& & & &
5: 0 1 0 1;
----------------
6: 0 1 1 0
左移运算符(<<)
1 = 00000000 00000000 00000000 00000001
1 << 5 就是将1往左边移动5位
-----------------------------------
结果为:
32 = 00000000 00000000 00000000 00100000
右移运算符(>>)
示例一
8: 00000000 00000000 00000000 00010000
8 >> 2
-----------------------------------
结果为:
2 = 00000000 00000000 00000000 00000010
示例二
1 >> 5 = 00000000 00000000 00000000 00000000 00001
-----------------------------------
结果为:
0 = 00000000 00000000 00000000 00000000
右移无符号(>>>)
与右移运算符号的区别,主要是在负数运算的时候有所不同
十进制数字-1时在1的二进制取反,然后在+1;
1 = 00000000 00000000 00000000 00000001
取反 = 11111111 11111111 11111111 11111110
+ 1 = 11111111 11111111 11111111 11111111
-1 >>> 5
---------------------------------------
134217727 = 00000111 11111111 11111111 11111111