//右移一位(除以2的一次方)
System.out.println("2>>1=================" + (2 >> 1));//1
System.out.println("20>>1=================" + (20 >> 1));//10
System.out.println("200>>1=================" + (200 >> 1));//100
//右移2位(除以2的2次方)
System.out.println("2>>2=================" + (2 >> 2));//0
System.out.println("20>>2=================" + (20 >> 2));//5
System.out.println("200>>2=================" + (200 >> 2));//50
//左移一位(乘2的一次方)
System.out.println("2>>1=================" + (2 << 1));//4
System.out.println("20>>1=================" + (20 << 1));//40
System.out.println("200>>1=================" + (200 << 1));//400
//左移2位(乘以2的2次方)
System.out.println("2<<2=================" + (2 << 2));//8
System.out.println("20<<2=================" + (20 << 2));//80
System.out.println("200<<2=================" + (200 << 2));//800
java中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
测试:
public class TestBinary {
public static void main(String[] args) {
//左移一位
printInfo(10 << 1);//20
//右移一位
printInfo(10 >> 1);//5
//右移一位
printInfo(10 >>> 1);//5
// 左移一位
printInfo(-10 << 1);//-20
//右移一位
printInfo(-10 >> 1);//-5
//右移一位
printInfo(-10 >>> 1);//2147483643
}
/**
* 输出一个int的二进制数
*
* @param num
*/
private static void printInfo(int num) {
System.out.println(num + "的二进制为======" + Integer.toBinaryString(num));
}
}
结果
20的二进制为======10100
5的二进制为======101
5的二进制为======101
-20的二进制为======11111111111111111111111111101100
-5的二进制为======11111111111111111111111111111011
2147483643的二进制为======1111111111111111111111111111011
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义。
非
//【非】运算符用符号“~”表示,其运算规律如下:如果位为0,结果是1,如果位为1,结果是0
int a = 2;
printInfo((a));
printInfo((~a));
结果为:
2的二进制为======10
-3的二进制为======11111111111111111111111111111101
异或
//【异或】运算符是用符号“^”表示的,其运算规律是:两个操作数的位中,相同则结果为0,不同则结果为1
int a1 = 15;
int b1 = 2;
printInfo(a1);
printInfo(b1);
printInfo(a1 ^ b1);
结果为:
15的二进制为======1111
2的二进制为======10
13的二进制为======1101
或
//【或】运算符用符号“|”表示,其运算规律如下:两个位只要有一个为1,那么结果就是1,否则就为0
int a2 = 129;
int b2 = 128;
printInfo(a2);
printInfo(b2);
printInfo(a2 | b2);
结果为:
129的二进制为======10000001
128的二进制为======10000000
129的二进制为======10000001
与
//【与】运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0
int a3 = 129;
int b3 = 128;
printInfo(a3);
printInfo(b3);
printInfo(a3 & b3);
结果为:
129的二进制为======10000001
128的二进制为======10000000
128的二进制为======10000000