Java中的 |=、&=、^= 、<<= 运算

158 阅读1分钟
**运算符解释**
|=:两个二进制对应位都为0时,结果等于0,否则结果等于1;
&=:两个二进制的对应位都为1时,结果为1,否则结果等于0;
^=:两个二进制的对应位相同,结果为0,否则结果为1。
<<:左移
>>:右移
int a1 = 6;
int b1 = 8;
a1 |= b1;
// 6  的二进制:0110
// 8  的二进制:1000
// |= 运算得到:1110  ==>  14
System.out.println("a1 |= b1 ==> a1 = "+a1);

int a2 = 6;
int b2 = 8;
a2 &= b2;
// 6  的二进制:0110
// 8  的二进制:1000
// &= 运算结果:0000  ==>  0
System.out.println("a2 &= b2 ==> a2 = "+a2);

int a3 = 6;
int b3 = 7;
a3 ^= b3;
// 6  的二进制:0110
// 8  的二进制:0111
// ^= 运算结果:0001  ==>  1
System.out.println("a3 ^= b3 ==> a3 = "+a3);

打印结果:

img111.png

十六进制192D数据

byte[] b = new byte[]{(byte)0x19,(byte)0x2d};
short i = (short) (b[0] & 0x000000ff);
System.out.println("位移前,i = "+i+", 二进制:"+Integer.toBinaryString(i));
// 位移前:i = 25,   对应二进制:0001 1001
i <<= 8;
System.out.println("位移后,i = "+i+", 二进制:"+Integer.toBinaryString(i));
// 位移后:i = 6400, 对应二进制:0001 1001 0000 0000
System.out.println("b[1] = "+b[1]+",  二进制:"+Integer.toBinaryString(b[1]));
// b[1] = 45,       对应二进制:0000 0000 0010 1101
i|=b[1];
System.out.println("i |= b[1], i = "+i+", 二进制:"+Integer.toBinaryString(i));
//   450000 0000 0010 1101
// 64000001 1001 0000 0000
// 64450001 1001 0010 1101
System.out.println("result = "+(i/1000.0));

打印结果:

img222.png