关于这几个的运算符我一代码的实例来介绍,如下:
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