java 逻辑运算符(韩顺平)

短路与和逻辑与

  • 基本规则

短路与&&  条件1&&条件2  两个条件都为true,结果为true,否则为false

逻辑与&   条件1&条件2    两个条件都为true,结果为true,否则为false

  • 区别
  1. 短路与&&:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
  2. &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
  3. 短路或||:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
  4. |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低

//区别
 

//        int a = 4;
//        int b = 9;
//        if (a < 1 && ++b < 50) {
//            System.out.println("ok3");
//        }
//        System.out.println("a="+ a +"b=" + b);
//
//        if (a < 1 & ++b < 50) {
//            System.out.println("ok4");
//        }


//        System.out.println("a="+ a +"b=" + b);
        //对于短路与第一个条件为false,后面的条件不在执行和判断
        //对于逻辑与第一个条件为false,后面的条件会继续执行和判断

        //(1)||短路或:如果第一个条件为true
        //则第二个条件不会判断,最终结果为true,效率高
        //(2)|逻辑或:不管第一个条件是否为true
        //第二个条件都要执行

//        int a = 4;
//        int b = 9;
//        if( a > 1 || ++b > 4) {
//            System.out.println("ok4");
//        }
//        System.out.println("a=" + a + "b=" + b);
//
//        if( a > 1 | ++b > 4) {
//            System.out.println("ok5");
//        }
//        System.out.println("a=" + a + "b=" + b);
  • 异或^

a^b  当结果a和b不同时,结果为true,否则为false

补充应用:

  1. 将两个变量的值进行交换
int a =1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);//2
System.out.println(b);//1

2.寻找出现一次的数(时间复杂度为O(n))

int[] a = {2, 3, 3, 4, 4, 6, 7, 7};
int l = a.length;
int eor=0;
int i;
for(i=0;i<l;i++)
{
    eor^=a[i];
}
int rightone=eor&(~eor+1);//提取最右侧的1

int onlyone=0;//eor'
int cur;
for(i=0;i<l;i++){
    cur=a[i];
    if((cur&rightone)==0){
        onlyone^=cur;
    }
}
System.out.println(onlyone);
System.out.println(onlyone^eor);
 

若文章内容错误,希望大家帮忙指正

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值