注:在涉及到位运算时,一定要注意位运算的优先级。该加的括号一定要加
在计算机中,cpu只能接受二进制的数据和指令;接下来就学习一下二进制的运算——位运算
二进制的运算有:
按位与 &
按位或 |
按位异或 ^
按位取反 ~
左移<<
右移>>
A | B | A&B | A|B | A^B |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
按位与可以类比&&运算符来记
按位或可以类比||运算符来记
按位异或可以用"相同为0,相异为1"
左移相等于乘上2,右移相当于除于2;
最常用就是以上五种;
按位与&可以用来判断特定的位是1还是0;
按位与&:
1.如果我要判断a的第j为是0还是1的话,只需要计算出a&(1<<j)的值,如果是1的话该位就是1,反之则反之
2.如果需要判断一个数a是否为2的次幂,只需要计算出a&(a-1)的值,如果是0的话该数是2的次幂,反之则反之
3.取一个数a的最底位的1,用a&-a,例如20(10) = 10100(2),那么20&-20 = 100(2);
4.可以将a的第j位变为0,用a&(0<<j)即可
按位异或^
1.如果需要将a的第j为取反的话,只需要进行 a^(1<<j)即可;
2.利用自反性交换两个数,按位异或有个很神奇的性质--自反性 a^b^b = a;
利用这个性质我们可以不用第三个变量就能交换两个数;
例如:我们要交换a和b两个,只需要进行以下操作即可;
a = a ^ b;
b = a ^ b;
a = a ^ b;
按位或:
1.可以将a的第j位变为1,用a|(1<<j)即可
暂时就想到这么多了。