java中int占4字节 即 4Byte = 32bit(位),其中最高位是符号位0代表正数,1代表负数
举例 :
int 1=0 0000000 00000000 00000000 00000001
int -1=1 0000000 00000000 00000000 00000001
1. | 位或运算符及规则
// | 位或运算, 计算规则:1|0=1,1|1=1,0|0=0,有真则真
int a = 5; // 0000 0101
int b = 3; // 0000 0011
a|= b = 7; // 0000 0111
//|= (或等于) 等价于 a=a|b
System.out.println("a|b = "+a);
2.^ 异或运算符及规则
// ^ 位异或运算 计算规则: 1^0=1,1^1=0,0^0=0,两数相同为假,真假相异为真
int a = 5; //0000 0101
int b = 3; //0000 0011
a ^=b = 6; //0000 0110
System.out.println("a^b = "+a);
3.& 与运算符及规则
// &位与运算, 计算规则:1&1=1, 1&0=0,0&0=0,真(与)真为真,真(与)假为假,假(与)假为假
int a = 5; //0000 0101
int b = 3; //0000 0011
a &=b = 1; //0000 0001
System.out.println("a&b = "+a);
4.<<,>>(有符号)左位移,右位移运算
// <<,>> 位移运算,左位移最低位补0,右位移符号位后 最高位补0
int a = 5; //0000 0101
a=a<<1 = 10; //0000 1010
System.out.println("a<<1 = "+a);
//0000 1010
a=a>>1; //0000 0101
System.out.println("a>>1 = "+a);
int m = -1; //1 1111111111111111111111111111111
m>>1 //1 0111111111111111111111111111111
m<<1 //1 1111111111111111111111111111110
5.>>>无符号位右移,没有无符号位左移
//>>> 无符号位位移运算,不管正负最高位补0
//int 占32字节,其中最高代表符号位0正数,1负数,有效计数位为后31
//负数位移会变正数
int m = -1; //1 1111111111111111111111111111111
m>>>1=2147483647 ; //0 1111111111111111111111111111111
int n = 1 ; //0 0000000000000000000000000000001
n>>>1 = 0 ; //0 0000000000000000000000000000000
int i= Integer.MIN_VALUE; //1 0000000000000000000000000000000
//Integer.MIN>>>1=11073741824 //0 1000000000000000000000000000000
//Integer.MAX = //0 1111111111111111111111111111111
//Integer.MAX>>>1 //0 0111111111111111111111111111111
System.out.println("m的二进制="+Integer.toBinaryString(m));