/*

A:逻辑运算符有哪些

& 与 (并且) , | 或 (或者) , !(非) , ^(异或) , 

        逻辑双与&&(短路与) , 逻辑双或||(短路或)

注意事项:

a:逻辑运算符一般用于连接boolean类型的表达式或者值。

在Java中我们要表示一个数大于3并且小于6 ,不可以写成3<x<6,应该写成 x>3 & x<6 。

b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。

算术表达式:a + b

比较表达式:a == b

            赋值表达式: int a = 10

  什么叫 布尔类型表达式?

         就是表达式的结果是布尔类型的 

 比较表达式


 结论 

   &: 两边 只要有false 结果肯定为 false

   有false则false

|: 两边 只要有true 结果肯定为true

   有true则true

^: 两边相同为false 不同为true

       同性相斥,异性相吸 (磁铁关系)

!: 非  (不是)

 非true则false

 非false则true


 对某一个值进行偶数个非 得到结果是其本身

*/

class OperatorDemo{
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
        //&的用法 :并且 
//左右两边连接boolean类型的值或表达式
System.out.println((a>b)&(a>c));//false & false  =  false
        System.out.println((a>b)&(a<c));//false & true   =  false
System.out.println((a<b)&(a>c));//true  & false  =  false
System.out.println((a<b)&(a<c));//true  &  true  =  true
        System.out.println("-------------------------------------------------------");
//| 或,  或者的意思  有true则true
System.out.println((a>b)|(a>c));//false | false  =  false
        System.out.println((a>b)|(a<c));//false | true   =  true
System.out.println((a<b)|(a>c));//true  | false  =  true
System.out.println((a<b)|(a<c));//true  |  true  =  true
System.out.println("-------------------------------------------------------");
//^ 异或   相同为false 不同为true
System.out.println((a>b)^(a>c));//false ^ false  =  false
        System.out.println((a>b)^(a<c));//false ^ true   =  true
System.out.println((a<b)^(a>c));//true  ^ false  =  true
System.out.println((a<b)^(a<c));//true  ^ true  =   false
System.out.println("-------------------------------------------------------");
       //逻辑非!  
System.out.println(!(a>b));//!false = true
        System.out.println(!!(a>b));//!!false = !true = false
        System.out.println(!!!(a>b));//true
}
}


/*

 逻辑双与&& 和逻辑与&的区别 


  开发中 常用&&  ||


    逻辑运算符 连接boolean类型的 

&:有false则false


 A:结果一样

 B:&& 具有短路效果

      如果遇到false后面的式子不再执行

  左边为false 右边就不执行

  &&效率比&高


  开发中常用&&

       || :遇到true后面的式子不再执行

*/

class OperatorDemo2{
public static void main(String[] args) {
/*
int a = 3;
int b = 4;
int c = 5;
//&&的用法 :并且 
//左右两边连接boolean类型的值或表达式                     &       &&
System.out.println((a>b)&&(a>c));//false && false  =  false
        System.out.println((a>b)&&(a<c));//false && true   =  false
System.out.println((a<b)&&(a>c));//true  && false  =  false
System.out.println((a<b)&&(a<c));//true  &&  true  =  true
        System.out.println("-------------------------------------------------------");
*/
//使用上
int x = 3;
int y = 4;
//&
        //System.out.println((x++==3)&(y++==4));//true & true 
        //System.out.println("x:"+x);//4
//System.out.println("y:"+y);//5
//&&
        //System.out.println((x++==3)&&(y++==4));//true & true 
        //System.out.println("x:"+x);//4
//System.out.println("y:"+y);//5
        //&
         //System.out.println((++x==3)&(y++==4));//false & true =false 
              //x先自加变成了4 再做判断 第一个式子结果是false
  //继续执行符号右边式子,先做判断,然后再自加 第二个式子结果是true
         //System.out.println("x:"+x);//4
     //System.out.println("y:"+y);//5
 System.out.println((++x==3)&&(y++==4));//false & true =false 
                 // x先自加变成4 再做判断 第一个式子结果是false 
 //  && 遇到false 后面的就不执行了,
 // 没有执行符号右边的式子
//因为你知道 逻辑与的结论  是有false则false 
         System.out.println("x:"+x);//4
     System.out.println("y:"+y);//4
}
}