继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

八、Java中的运算符(二)

慕神8447489
关注TA
已关注
手记 1134
粉丝 172
获赞 955

首先,上一节的最后,我介绍了一些逻辑运算符,下面附上一些代码,(在注释中会有详细描述)

public class TestLogic{
    
    public static void main(String[] args){        //逻辑与 & 二元运算符,只要有个参与逻辑与运算的 操作数 为 false 那么整个逻辑表达式的结果就为false。
        //有false 就是false,全 true 才 true。
        System.out.println(false & true);//false
        System.out.println(true & false);//false
        System.out.println(false & false);//false
        System.out.println(true & true);//true
        System.out.println("************************************");        //逻辑或 | 有true 则 true ,全false 则false。
        System.out.println(false | true);//true
        System.out.println(true | false);//true
        System.out.println(false | false);//false
        System.out.println(true | true);//true
        //逻辑异或  ^  相异为true,,相同为 false。
        System.out.println("************************************");
        System.out.println(false ^ true);//true
        System.out.println(true ^ false);//true
        System.out.println(false ^ false);//false
        System.out.println(true ^ true);//false
        //逻辑非  !  一元运算符   对boolean 值取反   true --> false   false -- > true
        int a = 9;
        System.out.println(!false);//true
        System.out.println(!true);//false
        System.out.println(!(++a == a++));//false
        System.out.println("************************************");        //短路与 &&  规律,和使用的结果  和 逻辑与一致。
        System.out.println(false && true);//false
        System.out.println(true && false);//false
        System.out.println(false && false);//false
        System.out.println(true && true);//true
        //区别  在进行逻辑运算的时候,只要前面有一个表达式的值为false,那么短路与将忽略后续的所有参与逻辑与运算的表达式。
        a = 10;        int b = 15;
        boolean bool = (a > 15) && (b++ < 20);
        System.out.println("bool = "+bool);//false
        System.out.println("b = "+b);//16
        //短路或 || 如果前面的表达式的返回值有true,那么后续的表达式将全部被忽略。
        
        //总结:短路与  与   短路或  执行的效率  比 逻辑与  和 逻辑或的效率要高。
        
    }
}

如果是混合使用呢?可以执行下以下代码,观察输出结果:


webp

逻辑运算符与自增运算符的逻辑


位运算符:直接对二进制位进行操作的运算符。

位运算的效率比较高。直接对底层的二进制位操作。

java中支持的位运算符:

&:按位与
|:按位或
^:按位异或
~:按位取反
>>:带符号右移
<<:左移
>>>:无符号右移

注意:操作数和结果必须都是整形数。
通过操作数来区分逻辑运算和位运算。

import java.util.Random;public class TestBit{    
    public static void main(String[] args){        final int MIN = 100;        final int MAX = 1000;        // &  按位与   规则:对应的位bit上 有0则0 全1 则1
        System.out.println(5&6);        //将指定的数的二进制后四位所代表的整数求出。
        int intNum = (int)(Math.random()*(MAX-MIN)+MIN);
        System.out.println(Integer.toBinaryString(intNum));
        System.out.println(Integer.toBinaryString(intNum&0xf));        // | 按位或    规则: 对应的位bit 上有1 则1  全0 则0
        System.out.println(5|6);        //特点 :如果两个操作数对应的位上没有全1的情况,那么两个操作数按位或的结果与直接相加的结果一致。
        //应用:需要定义8个整数,8个特殊的整数,8个数的所有的排列组合的和的结果都是不同的。
        int a1 = 0b00000001;        int a2 = 0b00000010;        int a3 = 0b00000100;        int a4 = 0b00001000;        int a5 = 0b00010000;        int a6 = 0b00100000;        int a7 = 0b01000000;        int a8 = 0b10000000;        //按位异或 ^    规则:相异为1  相同为0
        System.out.println(5^10);//15
        //特点:一个操作数,连续异或同一个数2次,结果是该数自身。
        System.out.println((char)('你'^10));//15 
        //简单的加密的功能
        char c1 = '我';        char c2 = '恨';        char c3 = '你';        //密钥
        int key = 20;
        System.out.println(""+(char)(c1^key) + (char)(c2^key)+(char)(c3^key));//
        System.out.println(""+(char)(c1^key^key) + (char)(c2^key^key)+(char)(c3^key^key));//
        
        //按位取反 ~ 单目  规则:1-->0  0--->1  包括符号位。
        System.out.println(~0);
        System.out.println(~127);//0111 1111-》 1000 0000
        
        //左移  <<   规则:直接移走高位指定的位数  低位补0。
        int a = 10;// 1010--> 101000-->40
         //1010--> 10100-->20
        a <<= 1;
        System.out.println(a);        2的16次幂可以表示为1<<16;        //应用:可以在一定范围内,替代 乘以2的次幂。
        a <<= 27;
        System.out.println(a);        
        //带符号右移 >>  规则:低位被挤走,高位补符号位  正数补0  负数 补1
        //应用:在一定范围内,可以实现除以二的n次幂。移动几位,除以二的几次幂。
        a = 9;// 1001 >> 2  ---> 10
        a = -1;
        a >>= 10;
        System.out.println(a);        
        //无符号右移 >>> 规则: 低位被挤走,高位补0
        a = -1;
        System.out.println(a>>>=1);        //应用:为了得到一个正整数
        //另外一种得到随机数的方式
        Random random = new Random();        //random.nextInt() 结果为随机的在int 取值范围内的一个值
        //int ran = random.nextInt() >>> 1;
        //System.out.println(" ran= "+ran);
        //[100~1000)
        //ran%(MAX-MIN);[0~900)
        //ran%(MAX-MIN)+MIN;[100~1000)
        int ran = (random.nextInt() >>> 1)%(MAX-MIN)+MIN;
        System.out.println(" ran= "+ran);        
        //需求:将随机数的5-8位所代表的整数求出
        System.out.println(Integer.toBinaryString(ran));
        System.out.println(Integer.toBinaryString((ran&0xf0)>>4));
    }
}

条件运算符

唯一的一个三目运算符

语法:

[第一部分] ? [第二部分] : [第三部分]

第一部分:必须返回一个boolean 值。

如果第一部分 结果为true ,那么执行 第二部分。

如果第一部分 结果为 false ,那么跳过第二部分,执行第三部分。

注意:第二部分,和第三部分,返回的值的类型必须兼容。
运行代码:

System.out.println(a>b?1:9.0);//运行结果如果正确会转化成浮点数与9.0保持一致,(顺便复习以下类型转换)

运算符的优先级

好比数学中的运算符优先级:有乘除先算乘除,有小括号先算小括号里面的
下面附上Java程序中运算符的优先级:


webp



作者:Tinner丶
链接:https://www.jianshu.com/p/6a9f9dd67110


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP