zoukankan      html  css  js  c++  java
  • 逻辑操作符符与按位操作符的这些知识,你必须要知道!

    无论何时,都要保持足够的警惕性。比你聪明的人都在努力,再不动起来,我们就老了。欢迎大家扫描下方的二维码关注我的微信公众号,与我一起学习Java。

    扫一扫,关注我

    温故知新

    上一节,我们讲了Java中的算术操作符、自增自减操作符以及关系操作符,并通过案例进行了相应的说明。请回答以下几个问题:

    1. +/-操作符在作为一元操作符时,它们的作用分别是什么?
    2. 假设有变量a,那么a++和++a,其含义有何不同?
    3. 关系操作符适用于所有基本数据类型吗?
    4. 请说说==和equals有什么异同。

    更上一层楼

    今天我们继续讲解Java中操作符的相关知识,主要涉及两块的内容:

    1. 逻辑操作符
    2. 按位操作符

    逻辑操作符

    逻辑操作符负责连接多个关系表达式,其能根据参数的逻辑关系,生成一个boolean值。逻辑操作符有与(&&)或(||)非(!)。“与”、“或”、“非”只能应用于boolean值,而不能将一个非布尔值当作布尔值在逻辑表达式中使用。

    1. &&操作符表示所有的关系表达式都为true时才为true
    2. ||操作符表示只要有一个关系表达式为true就为true
    3. !操作符表示取当前的相反量
    4. 逻辑操作符混合使用时,可以使用括号()来确定优先级
    public class LogicExp {
      public static void main(String [] args) {
        //&& 所有的关系表达式都为true时才为true
        System.out.println(5>3&&5>4);
        System.out.println(5>3&&5>6);
        //|| 只要有一个关系表达式为true就为true
        System.out.println(5>3||5>4);
        System.out.println(5>3||5>6);
        //! 取当前的相反量
        System.out.println(5>3);
        System.out.println(!(5>3));
        //混合使用逻辑操作符()内的表达式优先进行运算
        System.out.println((5>6&&5>3) || 5>4);
        System.out.println(5>6 && (5>3||5>4));
      }
    }
    //output
    //true
    //false
    //true
    //true
    //true
    //false
    //true
    //false
    

    &&||操作符往往还有短路的作用,短路的作用体现在:比如说&&操作符,如果第一个表达式为false,那么它便不会去对第二个表达式进行运算||操作符具有同样的特性,如果第一个表达式为true,那么它便不会去对第二个表达式进行运算

    public class LogicExp {
      public static void main(String [] args) {
        System.out.println("&&短路操作:"+(test3()&&test1()));
        System.out.println("====================================")
        System.out.println("||短路操作:"+(test1()||test2()));
      }
      public static test1() {
        System.out.println("5>3:"+(5>3));
        return (5>3);
      }
      public static test2() {
        System.out.println("5>4:"+(5>4));
        return (5>4);
      }
      public static test3() {
        System.out.println("5>6:"+(5>6));
        return (5>6);
      }
    }
    //output
    //5>6:false
    //&&短路操作:false
    //====================================
    //5>3:true
    //||短路操作:true
    

    因此在写逻辑表达式的时候,把重要判断的条件表达式放在前面优先判断,可以减少不必要的运算,从而获得潜在的性能提升。

    按位操作符

    除了Java中的八种基本数据类型外,还有一个比这些基本数据类型还小的单位bit(位),如1 byte = 8 bit。按位操作符就是对这个二进制位进行操作。按位操作符会对两个参数中对应的位执行布尔(boolean)代数运算(因为二进制位只可能为0或者为1),并生成一个boolean结果。

    按位操作符主要分为&(按位与)|(按位或)^(按位异或)~(非)四种。

    1. &(按位与):如果两个输入为都是1,则生成1,否则生成0。
      假设输入值的二进制数是下列的输入值1和输入值2
      输入值1:00011010
      输入值2:00110011
      => 比较后的结果是:00010010
      
    2. |(按位或):只要两个输入位有一个为1,则生成1;只有两个输入位都是0的情况下才会生成0。
      假设输入值的二进制数是下列的输入值1和输入值2
      输入值1:00011010
      输入值2:00110011
      => 比较后的结果是:00111011
      
    3. ^(按位异或):如果两个输出位有且只有一个为1,则生成1,否则生成0.
      假设输入值的二进制数是下列的输入值1和输入值2
      输入值1:00011010
      输入值2:00110011
      => 比较后的结果是:00101001
      
    4. ~(非):属于一元操作符,只对一个操作数进行操作,取其相反值。如0的相反值是1。
      假设输入值的二进制数是下列的输入值1
      输入值1:00011010
      => 取反后的结果是:11100101
      

    对于boolean值而言,由于其作为一种单bit值,按位操作符具有与逻辑操作符相同的效果,只是其没有逻辑操作符的短路功能

    每日一结

    今天主要讲解了逻辑操作符和按位操作符,对boolean类型而言,两种操作符具有大致相同的逻辑判断效果,但是也有一定的区别,这是我们需要谨记的地方。

    而在使用逻辑操作符时,一定要记得,把优先级高的、更顶层的关系表达式放在前面,这样能够避免不必要的运算,从而一定程度上提高程序性能。

    如果觉得我写的内容对你有帮助,欢迎关注我的微信公众号:

    扫一扫,关注我

  • 相关阅读:
    【NOIP 2003】 加分二叉树
    【POJ 1655】 Balancing Act
    【HDU 3613】Best Reward
    【POJ 3461】 Oulipo
    【POJ 2752】 Seek the Name, Seek the Fame
    【POJ 1961】 Period
    【POJ 2406】 Power Strings
    BZOJ3028 食物(生成函数)
    BZOJ5372 PKUSC2018神仙的游戏(NTT)
    BZOJ4836 二元运算(分治FFT)
  • 原文地址:https://www.cnblogs.com/lurker-yaojiang/p/10488895.html
Copyright © 2011-2022 走看看