位运算——取反(~)、与(&)和或(|)

按位与(&)运算典型的场景是获取网段值,IP地址与掩码255.255.255.0进行按位与运算得到高位24位,即为当前IP的网段。按位运算的左右两边都是整数,true&false这样的方式也是合法的,因为boolean底层表示也是0与1。

按位与和逻辑与(符号位&&)运算都可以作用于条件表达式,但是后者有短路功能,表达如下所示:

boolean a = true;
boolean b = true;
boolean c = (a=(1==2)) && (b=(1==2));

因为&&前边的条件表达式,即如上的红色代码部分的结果为false,触发短路,直接退出,最后a的值为false,b的值为true。假如把&&修改为按位与(&),则执行的结果为a与b都是false。

同样的逻辑,按位或对应的逻辑运算或运算(符号位||)也具有短路功能,当逻辑或||之前的条件表达式,即如下代码(1==1)的结果为true时,直接退出:

boolean e = false;
boolean f = false;
boolean g = (e=(1==1)) || (f=(1==1));

最后e的值为true,f的值为false。假如把||修改为按位或(|),执行的结果为e与f都是true。

逻辑或、逻辑与运算只能对布尔类型的条件表达式进行运算,7&&8这种运算表达式是错误的。

异或运算没有短路的功能,符号为^,在哈希算法中用于离散哈希值,对应的位上不一样才是1,这样的都是0。比如,1^1=0/0^0=0/1^0=1/true^true=false/true^false=true。

 

猜你喜欢

转载自blog.csdn.net/weixin_43222122/article/details/104300703