Java 位运算

// 左移( << ) 低位补0
// 0000 0000 0000 0000 0000 0000 0000 0110 然后左移2位后,低位补0:
// 0000 0000 0000 0000 0000 0000 0001 1000
System.out.println(6 << 2);// 运行结果是24

// 右移( >> ) 高位补"符号位"
// 0000 0000 0000 0000 0000 0000 0000 0110 然后右移2位,高位补0:
// 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(6 >> 2);// 运行结果是1
//-6换算二进制后为:0110 取反加1,即
//1111 1111 1111 1111 1111 1111 1111 1010 然后右移2位,高位补1:
//1111 1111 1111 1111 1111 1111 1111 1110
System.out.println(-6>> 2);// 运行结果是-2

// 无符号右移( >>> ) 高位补"符号位"
// 0000 0000 0000 0000 0000 0000 0000 0110 然后右移2位后,高位补0:
//0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(6 >>> 2);// 结果是1
//1111 1111 1111 1111 1111 1111 1111 1010 然后右移2位,高位补1:
// 1111 1111 1111 1111 1111 1111 1111
System.out.println(-6 >>> 2);// 结果是1073741822

// 位与( & )
// 位与:第一个数与第二个数,同位且都为1,那么对应位数也为1,否则为0
//0000 0000 0000 0000 0000 0000 0000 0110 &
0000 0000 0000 0000 0000 0000 0000 0010
//0000 0000 0000 0000 0000 0000 0000 0010
System.out.println(6 &2);// 结果为2

// 位或( | )
//第一个数与第二个数,同位且只要有一个是1,那么对应位数也为1,否则为0
//0000 0000 0000 0000 0000 0000 0000 0110 &
//0000 0000 0000 0000 0000 0000 0000 0011
//0000 0000 0000 0000 0000 0000 0000 0111
System.out.println(6 | 3);// 结果为7

// 位异或( ^ )
//第一个数与第二个数,同位且数值相反,那么那么对应位数为1,否则为0
//0000 0000 0000 0000 0000 0000 0000 0110 &
//0000 0000 0000 0000 0000 0000 0000 0011
//0000 0000 0000 0000 0000 0000 0000 0101
System.out.println(6 ^ 3);//结果为5

// 位非( ~ )
// 对应位数取反值
//0000 0000 0000 0000 0000 0000 0000 0110 取反
//1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(~6);// 结果为-7

你可能感兴趣的:(java,位运算)