Java基础-
我们知道,计算机中的数据信息都是以二进制0、1形式存在的,具体来说是以该数据的补码形式。在位运算符中有:>>,<<, |,^,~,>>>。那么二进制数据与位运算符之间会有什么化学反应呢?下面先写一个小demo
package com.basic.day02;
/*
* 测试 & | ^ ~
* */
public class LogicTest2 {
public static void main(String[] args) {
int a = 4;
int b = 7;
System.out.println(a & b);//4
System.out.println(a >> 2);//1
System.out.println(a << 2);//16
System.out.println(16 >>> 3);//2
System.out.println(a | b);//7
System.out.println(a ^ b);//3
System.out.println(~ a);//-5
System.out.println(~ b);//-8
}
}
首先,我们将变量a,b换成2进制,然后按照0是false,1是true进行相应的计算。
&:按位与运算(0&1=0,1&0=0,0&0=0,1&1=1),
|:按位或运算(0|1=1,1|0=1,1|1=1,0|0=0)
>>:右移 (3>>1 == 3/2=1),即>>n,右移n次,就整除2的n次幂。符号位是0时,右移空缺补0;符号位是1时,右移空缺补1.
<<:左移(3<<2 == 3*2*2=12 ),即<<n,左移n次,就乘以2的n次幂。被移除的高位丢弃,空缺位补0.
>>>:无符号右移,空缺位补0.
^:按位异或(0^1=1,1^0=1,1^1=0,0^0=0),即不同才是true,相同才是false。
~:按位取反,各二进制按补位取反。先按位取反,得到一个负数,此时得到负数二进制的补码,然后在此基础上-1,得到反码(符号位不变),最后按位取反,得到负数的源码(符号位不变)。