一、位运算符
推导过程:
public class BitOperator {
public static void main(String[] args) {
/*
推导过程
1.先得到 2的补码
2的原码 00000000 00000000 00000000 00000010
2的补码 00000000 00000000 00000000 00000010
2.得到 3的补码
3的原码 00000000 00000000 00000000 00000011
3的补码 00000000 00000000 00000000 00000011
3.按位&
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000010 &运算后的补码
运算后的原码也是00000000 00000000 00000000 00000010
结果就是 2
*/
System.out.println(2&3); //2
/*
推导过程
1.先得到-2的原码 10000000 00000000 00000000 00000010
2.得到-2的反码 11111111 11111111 11111111 11111101
3.得到-2的补码 11111111 11111111 11111111 11111110
~-2操作运算 00000000 00000000 00000000 00000001
运算后的是正数,原码就是补码 00000000 00000000 00000000 00000001
结果为1
*/
System.out.println(~-2); //1
/*
推导过程
1.先得到2的补码
2的原码 00000000 00000000 00000000 00000010
2的补码 00000000 00000000 00000000 00000010
2.~2操作运算 11111111 11111111 11111111 11111101 运算后的补码
3.运算后的反码 11111111 11111111 11111111 11111100
4.运算后的原码 10000000 00000000 00000000 00000011
结果为-3
*/
System.out.println(~2); //-3
/*
推导过程
1.先得到 2的补码
2的原码 00000000 00000000 00000000 00000010
2的补码 00000000 00000000 00000000 00000010
2.得到 3的补码
3的原码 00000000 00000000 00000000 00000011
3的补码 00000000 00000000 00000000 00000011
3.按位|
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000011 运算后的补码
运算后的原码也是00000000 00000000 00000000 00000011
结果就是 3
*/
System.out.println(2|3);//3
/*
推导过程
1.先得到 2的补码
2的原码 00000000 00000000 00000000 00000010
2的补码 00000000 00000000 00000000 00000010
2.得到 3的补码
3的原码 00000000 00000000 00000000 00000011
3的补码 00000000 00000000 00000000 00000011
3.按位|
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000001 运算后的补码
运算后的原码也是00000000 00000000 00000000 00000001
结果就是 1
*/
System.out.println(2^3);//1
}
}
二、>>、<<和>>>
演示案列:
System.out.println(1 >> 2); //0
System.out.println(1 << 2); //4
System.out.println(4 << 3); //4*2*2*2 = 32
System.out.println(15 >> 2); //15/2/2 = 3