其他运算符

139 阅读2分钟

这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)

4.逻辑运算符

image.png

/*
运算符四:逻辑运算符
​
&   &&  |   ||  !   ^
​
说明:
1.逻辑运算符操作的都是boolean类型变量
​
​
*/class LogicTest{
    public static void main(String[] args){
        //区分&和&&
        //相同点1:&与&&运算结果相同
        //相同点2:当符号左边是true时,二者都会执行符号右边的运算
        //不同点:当符号左边是false时,&继续执行符号右边操作,&&不执行符号右边操作
        boolean b1=true;
        b1 = false;
        int num1=10;
        if(b1 & (num1++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
​
        }
        System.out.println("num1 = " + num1);
​
        
        boolean b2=true;
        b2 = false;
        int num2=10;
        if(b2 && (num2++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num2 = " + num2);
​
        //区分|与||
        //相同点1:|与||运算结果相同
        //相同点2:当符号左边是false时,二者都会执行符号右边的运算
        //不同点:当符号左边是true时,|继续执行符号右边操作,||不执行符号右边操作
​
        boolean b3=true;
        
        int num3=10;
        if(b3 | (num3++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
​
        }
        System.out.println("num3 = " + num3);
​
        boolean b4=true;
        
        int num4=10;
        if(b4 || (num4++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
​
        }
        System.out.println("num4 = " + num4);
​
        //短路与和或当第一个运算就可以判断出结果时,第二个不执行
        //推荐使用短路逻辑运算符
    }
}

5.位运算符

位运算是直接对整数二进制的运算

image.png

image.png

image.png

/*
运算符五:位运算符(二进制)
​
结论:
位运算操作的都是整型变量
<<在一定范围内每向左移以为,相当于*2
>>在一定范围内每向右移一位,相当于/2
>>若最高位为1用1补,最高位为0用0补
>>>无符号右移,无论最高位为0或1都用0补
​
​
面试题:
最高效的2*8?
2 << 3或8 << 1
*/
​
class BitTest{
    public static void main(String[] args){
        int i=21;
        System.out.println("i << 2:" + (i<<2));//i*2*2
        System.out.println("i << 2:" + (i<<3));//i*2*2*2
        System.out.println("i << 2:" + (i<<26));//i*2^26
        System.out.println("i << 2:" + (i<<27));//超过限度
​
​
        int m=12;
        int n=5;
        System.out.println("m & n:"+(m&n));//只要一个是0就是0,两个都是1才为1
        System.out.println("m | n:"+(m|n));//只要有一个是1就为1,两个都是0才为2
        System.out.println("m ^ n:"+(m^n));//两个相同为1,不同为0
        //~取反就是0变1,1变0
​
        //练习:交换两个变量的值
        int num1 = 10;
        int num2 = 20;
        System.out.println("num1 = "+num1+";num2 = "+num2);
​
        //方式一:定义临时变量(推荐)
        int temp = 0;
        temp = num1;
        num1 = num2;
        num2 = temp;
        System.out.println("num1 = "+num1+";num2 = "+num2);
​
        //方式二:不用开辟临时变量,但是相加后可能超出存储范围而且有局限性只能数值型
        num1 = num1 + num2;
        num2 = num1 - num2;
        num1 = num1 - num2;
        System.out.println("num1 = "+num1+";num2 = "+num2);
​
        //方式三:使用位运算符m = k ^ n = (m ^ n) ^ n,有局限性只能数值型
        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;
        System.out.println("num1 = "+num1+";num2 = "+num2);
​
​
    }
}

6.三元运算符

image.png

/*
运算符六
三元运算符
​
(条件表达式?表达式1:表达式2)
​
1.条件表达式的变量是一个boolean类型
2.根据条件表达式的真或假,执行表达式,若为true执行表达式1,若为false则为表达式2
3.表达式1和表达式2要求是一致的
4.三运运算符可以嵌套使用
​
​
​
​
三元运算符与if-else转换
凡是可以使用三元运算符的地方都可以改写为if-else,反之不成立
​
​
如果既可以使用三元运算符又可使用if-else推荐使用三元运算符
*/
​
class SanYuan{
    
    public static void main(String[] args){
​
        //获取两个整数中的较大值
​
        int m = 12;
        int n =5;
​
        int max = (m > n ? m : n);
        System.out.println(max);
​
        double num = (m > n)?2:1.0;
        System.out.println(num);
​
​
        //****************************
        String maxStr = (m > n) ? "m大" : "n大"   ;
        System.out.println(maxStr);
​
        String maxStr1 = (m > n) ? "m大" :((m == n) ? "m,n" : "n大") ;
        System.out.println(maxStr1);
​
        //获取三个数的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;
​
        int max1 = (n1 > n2)?n1:n2;
        int max2 = (max1 > n3)?max1:n3;
        System.out.println(max2);
​
        //不推荐
        int max3 = (((n1 > n2)?n1:n2)>n3)?((n1>n2)?n1:n2):n3;
        System.out.println(max3);
​
​
        //if-else
        if(m>n){
            System.out.println(m);
        }else{
            System.out.println(n);
        }
​
    }
}

7.运算符的优先级

image.png

只有单目运算符、三元运算符、 赋值运算符是从右向左运算的()