java基础篇-位运算符
按位与&:两位结果全为1,结果为1,否则为0
**按位或|:**有一个为1,则为1,否则为0
按位异或^:有一个为0,一个为1取1,否则为0
按位取反~: 0变1,1变0
****算数右移>>😗***低位溢出,符号位不变,并用符号位补溢出的高位
**算数左移:**符号位不变,低位补0
**三个>😗*逻辑右移,也叫无符号右移,运算规则是 低位溢出,高位补0
public class Main {
public static void main(String[] args) {
int a = 2;
int b = 3;
int c = -2;
int d=1;
int e=-1;
// 2的原码 0010 0*2^0
// 3的原码 0011 正数三码合一
System.out.println(2 & 3); //2
// 按位与& 0010 运算后的补码 所以结果是2,正数,三码合一
System.out.println(a | b);//3
// 按位或|:有一个为1,则为1,否则为0
// 0010
// 0011
// 0011,结果为正数,所以是1*2^0+1*2^1=3
System.out.println(a ^ b); //1
// 按位异或^:有一个为0,一个为1取1,否则为0
// 0010
// 0011
// 0001 1*2^0,都是正数
System.out.println(~c);//1
// c是负数,-2,首先取原码 c 1010 再取反码 1101 补码(反码+1,前进1位)1110
// ~按位取反操作,0变1,1变0 运算后的原码 0001 1*2^0=1
System.out.println(~2); //-3
// 00000000 00000000 00000000 00000010 2的补码(正数三码合一) ,
// 11111111 11111111 11111111 11111101位运算后,
// 11111111 11111111 11111111 11111100反码
// 10000000 00000000 00000000 00000011原码 转换成10进制-1*(1*2^1+1*2^0)
System.out.println(~4); //-5
// 0100正数三码合一,安位取反 1011,
// 反码=补码-1 1010,原码1101,-1*(1*2^2+1*2^0)
System.out.println(d>>2);//0 本质 1/2/2
System.out.println(15>>2);//3 15/2/2 取整
System.out.println(d<<2);//4 本质1*2*2
}
}