美文网首页Java Web知识Java程序栈
八、Java中的运算符(二)

八、Java中的运算符(二)

作者: 一直想上树的猪 | 来源:发表于2018-12-01 23:56 被阅读2次

Java中的运算符(一)中介绍了比较常见的一些运算符,这一节主要围绕一些运算符的用法,以及介绍一些位运算等较复杂难理解的云算符。

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

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,那么后续的表达式将全部被忽略。
        
        //总结:短路与  与   短路或  执行的效率  比 逻辑与  和 逻辑或的效率要高。
        
    }
}

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


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

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

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

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程序中运算符的优先级:


运算符的优先级

相关文章

  • 八、Java中的运算符(二)

    在Java中的运算符(一)中介绍了比较常见的一些运算符,这一节主要围绕一些运算符的用法,以及介绍一些位运算等较复杂...

  • python基础(四)----运算符

    一.算术运算符(基本同Java) 二.比较运算符(基本同Java) 三.赋值运算符(基本同Java) 四.位运算符...

  • 算法整理(1) 位运算相关

    运算符 位运算符用来对二进制位进行操作,Java中提供了如下的位运算符:位运算符中,除 ~ 以外,其余均为二元运算...

  • java中instanceof的用法

    java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,...

  • instanceof的用法

    java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,...

  • Java中的逻辑运算符

    Java中的逻辑运算符

  • kotlin中的二元运算符重载

    可重载的二元算术运算符 在kotlin中,重载运算符需要使用operator修饰符,如 在java中调用时,像使用...

  • Java的运算符

    Java有4大类运算符:算术运算、位运算、关系运算和逻辑运算。 运算符的优先级 模运算符 Java中,模运算符不止...

  • kotlin中is,!is,as,as?运算符

    一、前言: 1.is运算符和 !is 运算符 kotlin中API提供的 is 运算符类似于Java中的 inst...

  • NO.3 运算符与分支结构

    Java中运算符大抵分为以下六种: 1)算术运算符:+,-,*,/,%,++,-- 2)关系运算符:>,<,>=,...

网友评论

    本文标题:八、Java中的运算符(二)

    本文链接:https://www.haomeiwen.com/subject/xtydcqtx.html