1、按位与 &
0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1& 1 = 1
同时为1则结果为1,否则为0;
如3 & 8 3 = 00000011 5 = 00000101 结果为 00000001
2、按位或 ||
0|0=0; 0|1=1; 1|0=1; 1|1=1;
两个数中只要有一个为1,则结果为1;同时为0 则结果为0;
3、异或 ^
两个数相同则结果为0,不同则结果为1;
0^0=0; 0^1=1; 1^0=1;1^1=0;
例如:01111010 ^ 00001111 = 01110101
4、左移运算符<<
a = a << 2;
将 a 的二进制数左移 2 位,右补 0,若 a = 15,即二进制数 00001111,左移2位得到 00111100,即十进制数60.
高位左移后溢出,舍弃不起作用。左移一位相当于该数乘以2。但些结论只适用于该数左移时被溢出舍弃的高位中不包含1 的情况。
注意:100<<1 是10005、右移运算符>>
a >> 2 表示将 a 的各二进位右移 2 位。移到右端的低位被舍弃,对无符号数,高位补 0。
如 a = 017 时:a = 00001111 >> 2 00000011
右移一位相当于除以 2 ,右移 n 位相当于除于 2^n。
在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入 0。对于有符号的值,如果原来符号位为 0 (该数为正),则左边也是移入 0,如果上例表示的那样,如果符号位原来为 1(该数为负),则左边移入的 0 还是 1 ,要取决于所用的计算机系统。移入 0 称为 逻辑右移,即简单右移。移入 1 称为 算术右移。
参考:详细版位运算讲解