逻辑操做符符与按位操做符的这些知识,你必需要知道!

不管什么时候,都要保持足够的警戒性。比你聪明的人都在努力,再不动起来,咱们就老了。欢迎你们扫描下方的二维码关注个人微信公众号,与我一块儿学习Java。vue

扫一扫,关注我

温故知新

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

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

更上一层楼

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

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

逻辑操做符

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

  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,那么它便不会去对第二个表达式进行运算app

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结果。学习

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

  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值,按位操做符具备与逻辑操做符相同的效果,只是其没有逻辑操做符的短路功能url

每日一结

今天主要讲解了逻辑操做符和按位操做符,对boolean类型而言,两种操做符具备大体相同的逻辑判断效果,可是也有必定的区别,这是咱们须要谨记的地方。spa

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

若是以为我写的内容对你有帮助,欢迎关注个人微信公众号:

扫一扫,关注我

相关文章
相关标签/搜索