1. &运算 :位与运算。相同位的两个数字都为1,则为1;若有一个不为1,则为0。
00101&11100的结果是00100
一个数&1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。
public void testNumber(int a) {
if ((a & 1) == 1) {
System.out.println(a + "是奇数");
} else if ((a & 1) == 0) {
System.out.println(a + "是偶数");
}
}
2. <<运算:左移运算。a << b就表示把a转为二进制后左移b位(在后面添b个0)。
例如100的二进制为1100100,而110010000转成十进制是400,那么100<< 2 = 400。可以看出,a << b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。
计算2的m次方时,可以写成1<<m,但是要求m<31,否则得到的结果不是2的m次方。原因是2的31次方超出了int型(Integer.MAX_VALUE=2的31次方-1),java会做特殊处理的。但是如果引入long型的整数做运算,结果就会不一样。1l<<31的结果就是2的31次方的值。
计算2的m次方时,可以写成1<<m,但是要求m<31,否则得到的结果不是2的m次方。原因是2的31次方超出了int型(Integer.MAX_VALUE=2的31次方-1),java会做特殊处理的。但是如果引入long型的整数做运算,结果就会不一样。1l<<31的结果就是2的31次方的值。