举例左移:21 左移两位:21 << 2;
0001 0101 (21) -----0101 0100 (21 * 2^2)
规律:每向左移一位,相当于再这个数的基础上乘以一个2
class BitTest{
public static void main(String[] args) {
int i = 21;
i = i << 2;
System.out.println(i);
}
//i = 84
}
经典面试题:最高效的方式计算2 * 8? 2 <<3,或者 8 >> 1
public class BitTest {
public static void main(String[] args) {
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));
//0为false 1为true 1100 & 0101 = 0100
System.out.println("m | n :" + (m | n));
//同理 1100 | 0101 = 1101
System.out.println("m ^ n :" + (m ^ n));
//相同为0 相异为1 1100 ^ 0101 = 1001
}
}
~按位取反就是将操作数的二进制表达式的每一位进行取反计算
运算举例:
比如我的计算机时32位的,计算~5的值,过程如下:
5转换成二进制就是
0000 0000 0000 0000 0000 0000 0000 0101;
~5就是:
1111 1111 1111 1111 1111 1111 1111 1010;
即结果为-6。
拓展: !5 = 0。