Java中的&、&&、|、||、>>、<<、^运算符

it2023-02-14  77

关于这几个的运算符我一代码的实例来介绍,如下:

1.&、&&、|、||、首先它们都是逻辑运算符,但是&&和||是短路运算符,也就是只判断运算符左边的即可,就可以确定整个表达式的结果了;所以它的执行效率高于&和|,因为这两个运算符需要将表达式中所有的boolean值都判断一遍,值得我们注意的是,这四个运算符的执行结果最终都是一致的(&和&&,|和||)实验代码如下:

package com.my.collection.collections; public class MoveTest { public static void main(String[] args) { //右移一位相当于除以2,右移n位相当于除以2^n次方 int num=10; // System.out.println("num右移一位结果:"+(num>>1));//注意要在num>>1加上括号,否则会报错 // System.out.println("num右移四位结果:"+(num>>4));//num/(2^4)即4/16 //左移一位相当于乘以2,同上 // System.out.println("num左移一位的结果:"+(num<<1));//相当于num*2 结果20 // System.out.println("num左移四位的结果:"+(num<<4));//相当于num*(2^4) 结果160 //按位异或^, 对应二进制位相同结果为0,否则为1 // System.out.println(1^1);//这是十进制的数字 // System.out.println(1^1^2);//这是十进制的数字 // System.out.println(2^3^2); //针对&和|和&&和||运算符 boolean tag1=true; boolean tag2=false; boolean tag3=true; boolean tag4=false; System.out.println(tag1&tag2&tag3); System.out.println(tag1|tag3|tag4); System.out.println(tag1|tag2); System.out.println(tag4&tag3); //System.out.println(1^1^4^7^7);//能消除掉的必须是偶数对 } }

运行结果 以上代码中有关于>>、<<、^运算符操作,只是注释了读者可以自行去掉注释运行看结果。另一个关于&和&&,|和||运算的示例代码如下: 下面代码有部分注释,读者可以去掉注释看运行的结果

package com.my.collection.collections; public class Test2 { public static void main(String[] args) { //测试短路运算符&&和||,这两个运算符是只要一边出现了,则不用管这个表达式的结果 int i=9,j=7; // if(i>2||++j<90) { // //这里i>2成立,所以就不在执行++j操作了,即短路了,j=7,而不是8,因为短路了后面不执行了 // System.out.println("测试j的值为:"+j); // }else { // System.out.println("failed"); // } // if(i<2||++j<90) { // //这里i>2不成立,所以就执行++j操作了,没有短路 // System.out.println("测试j的值为:"+j); // }else { // System.out.println("failed"); // } /* * 对于|运算符,只要有一个为真的话,最终结果都为真的 */ // if(i>2|++j<90) { // //这里i>2成立,因为是|运算符,所以不会短路,即所有的运算表达式都要执行一边,即++j执行了,最终结果表达式为真,所以j为8 // System.out.println("测试j的值为:"+j); // }else { // System.out.println("failed"); // } // if(i>2|++j>90) { // //这里i>2成立,因为是非短路的,所以就执行++j操作了而且只要一个为真最终结果就为真的 // System.out.println("测试j的值为:"+j); // }else { // System.out.println("failed"); // } /* * 非短路运算符&,要所有的表达式执行完了才能判断真假,而且有一个为假的话,这个表达式结果为假的 */ if(i>2&++j>90) { //这里i>2成立,因为是非短路的,所以就执行++j操作了而且只要一个为真最终结果就为真的 System.out.println("测试j的值为:"+j); }else { System.out.println("failed"); } } }

运行结果2

最新回复(0)