JAVA学习笔记二之(6)运算符②

JAVA学习笔记二之(6)运算符②

一、比较运算符

  1、比较运算符:
    ==,!=,>,<,>=,<=,instanceof(后面讲)
    
  2、特点:
    比较运算符的结果肯定是boolean类型。
    
  3、注意:
    请注意==和=的区别。
    
  4、运算符的优先级:
    java中的运算符也是有优先级的。
    如果你怕不好理解,那么就加小括号。

class OperatorDemo1 {
    public static void main(String[] args) {
        //在一行上声明多个变量,用逗号隔开是可以的。但是不推荐。
        //int a, b;
        //a = 10;
        //b = 20;

        //推荐在一行上只声明或者定义一个变量。
        //变量什么时候用,就什么时候定义。
        int a = 10;
        int b = 20;
        int c = 10;

        //下面这种写法不是语句。
        //a==b;
        //a==c;

        //下面这种写法就可以
        boolean flag = (a == b);
        System.out.println(flag);
        System.out.println(a==b);

        System.out.println("-----------");

        System.out.println(a>b);
        System.out.println(a>c);

        System.out.println("-----------");

        System.out.println(a>=b);
        System.out.println(a>=c);

        System.out.println("-----------");

        System.out.println(a!=b);
        System.out.println(a!=c);

        System.out.println("-----------");

        System.out.println((a+b-c) == (a-b+c));

        System.out.println("-----------");

        System.out.println(a==b); //false
        System.out.println(a=b); //20。把b的值赋值给a,留下a输出。

        //不兼容类型。
        //右边最终的结果是int类型
        //左边boolean类型。这种赋值是有问题的。

        //boolean flag2 = (a=b);
        //System.out.rintln(flag2); //20
    }
}
二、逻辑运算符

  1、逻辑运算符:
    &,|,^,!
    &&,||
    
  2、&逻辑运算符:有false则false。
  
  3、|逻辑运算符:有true则true。
  
  4、^逻辑运算符:相同为false,不同为true。
    情侣:男女,女男。
    不是情侣:男男,女女。
    
  5、!逻辑运算符:非真即假,非假即真。
      偶数个!不改变原始真假。

class OperatorDemo2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;

        //boolean f1 = (a > b) & (a > c);
        //System.out.println(f1);

        //&运算符
        System.out.println((a > b) & (a > c)); //false & false = false 
        System.out.println((b > a) & (a > c)); //true & false = false
        System.out.println((a > b) & (c > a)); //false & true = false
        System.out.println((b > a) & (c > a)); //true & true = true

        System.out.println("-----------");

        //|运算符
        System.out.println((a > b) | (a > c)); //false | false = false 
        System.out.println((b > a) | (a > c)); //true | false = true
        System.out.println((a > b) | (c > a)); //false | true = true
        System.out.println((b > a) | (c > a)); //true | true = true

        System.out.println("-----------");

        //^运算符
        System.out.println((a > b) ^ (a > c)); //false ^ false = false 
        System.out.println((b > a) ^ (a > c)); //true ^ false = true
        System.out.println((a > b) ^ (c > a)); //false ^ true = true
        System.out.println((b > a) ^ (c > a)); //true ^ true = false

        System.out.println("-----------");

        //!运算符
        System.out.println(a > b); //false
        System.out.println(!(a > b)); //true
        System.out.println(!!(a > b)); //false
        System.out.println(!!!(a > b)); //true
        System.out.println(!!!!(a > b)); //false
    }
}

  6、&&和&,以及||和|的区别:
    &&:具有断路效果。如果左边是false,右边将不再执行。     
    ||:具有断路效果。如果左边是true,右边将不再执行。
    
    开发中常用的逻辑运算符:
      &&,||,!

class OperatorDemo3 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;

        //&运算符
        System.out.println((a > b) & (a > c)); //false & false = false 
        System.out.println((b > a) & (a > c)); //true & false = false
        System.out.println((a > b) & (c > a)); //false & true = false
        System.out.println((b > a) & (c > a)); //true & true = true

        System.out.println("---------------");

        //&&运算符
        System.out.println((a > b) && (a > c)); //false && false = false 
        System.out.println((b > a) && (a > c)); //true && false = false
        System.out.println((a > b) && (c > a)); //false && true = false
        System.out.println((b > a) && (c > a)); //true && true = true

        System.out.println("---------------");

        int x = 3;
        int y = 4;
        int z = 5;

        System.out.println((x++ > 4) & (y++ > 5)); 
        System.out.println("x:" + x); //x:4
        System.out.println("y:" + y); //y:5

        System.out.println("---------------");

        System.out.println((x++ > 4) && (y++ > 5)); 
        System.out.println("x:" + x); //x:4
        System.out.println("y:" + y); //y:4
    }
}
三、位运算符

  1、位运算符:
    &,|,^,~
    <<,>>,>>>
    
    位运算符进行的操作都是二进制的。也就是说,我们要把数据转换成二进制的。
    
  2、&,|,^,~的使用

class OperatorDemo4 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        System.out.println(3 & 4); //0
        System.out.println(3 | 4); //7
        System.out.println(3 ^ 4); //7
        System.out.println(~3); //-4
    }
}

  分析:

  3的二进制:
    00000000 00000000 00000000 00000011
  4的二进制:
    00000000 00000000 00000000 00000100

位&运算符:按位与运算符,有0则0。
     00000000 00000000 00000000 00000011
    &00000000 00000000 00000000 00000100
    ------------------------------------
     00000000 00000000 00000000 00000000

位|运算符:按位或运算符,有1则1。
     00000000 00000000 00000000 00000011
    |00000000 00000000 00000000 00000100
    ------------------------------------
     00000000 00000000 00000000 00000111

位^运算符:按位异或运算符,相同则0,不同则1。
     00000000 00000000 00000000 00000011
    ^00000000 00000000 00000000 00000100
    ------------------------------------
     00000000 00000000 00000000 00000111

位~运算符:按位取反运算符。也就是1变0,0变1。
     00000000 00000000 00000000 00000011
   ~ 11111111 11111111 11111111 11111100 补码
     11111111 11111111 11111111 11111011 反码
     10000000 00000000 00000000 00000100 原码

  3、<<,>>,>>>的使用
    <<:相当于乘以2的移动位数次幂。
    >>:相当于除以2的移动位数次幂。
    >>>:相当于除以2的移动位数次幂。

class OperatorDemo5 {
    public static void main(String[] args) {
        int a = 16;

        System.out.println(a << 2); //64
        System.out.println(a >> 2); //4
        System.out.println(a >>> 2); //4
    }
}

  分析:

  16的二进制:
    00000000 00000000 00000000 00010000

<<运算符:左移运算符,把数据往左边移动右边指定的位数。移出的位置用0补齐。
    00000000 00000000 00000000 00010000
(00)00000000 00000000 00000000 01000000

>>运算符:右移运算符,把数据往右边移动右边指定的位数。移出的位置用最高位的数值补齐。
    00000000 00000000 00000000 00010000
    00000000 00000000 00000000 00000100(00)

>>>运算符:无符号右移运算符,把数据往右边移动右边指定的位数。移出的位置用0补齐。
    00000000 00000000 00000000 00010000
    00000000 00000000 00000000 00000100(00)

  面试题:
    请用最有效率的方式计算出2乘以8。
      2 << 3。

  4、按位异或
    (1)、按位异或运算符的特点:
      对同一个数据异或偶数次,该数据本身不变。
      
    (2)、应用:
      对数字加密。
      
    (3)、题目:
      需求:我有a,b两个变量,请把a与b的两个值进行交换。
         int a = 10;
         int b = 20;
      结果:
         a = 20;
         b = 10;
      代码:

class OperatorDemo6 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        System.out.println(a); //3 
        System.out.println(a ^ b); //7
        System.out.println(a ^ b ^ b); //3
    }
}

  5、交换两个变量值的多种方式

class OperatorDemo7 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        //方式1:
        //int temp = a;
        //a = b;
        //b = temp;
        //System.out.println(a + "---" + b);

        //方式2:
        //a = a ^ b;
        //b = a ^ b; //a ^ b = a ^ b ^ b = a;
        //a = a ^ b; //a ^ b = a ^ b ^ a = b;
        //System.out.println(a + "---" + b);

        //方式3:
        //a = a + b;
        //b = a - b;
        //a = a - b;
        //System.out.println(a + "---" + b);

        //方式4:一句话实现。
        a = (a + b) - (b = a);
        System.out.println(a + "---" + b);
    }
}
四、三元运算符

  1、表达式
    用运算符把变量和常量连接起来的式子。
    举例:
      算术表达式:a+b;
      赋值表达式:a=10;

  2、三元运算符
    (1)、格式:
      (条件表达式) ? 值1 : 值2;
      条件表达式的结果是boolean类型。
    (2)、三元运算符的执行顺序:
      看比较表达式的值是true还是false。
      如果是true,就把值1作为结果。
      如果是false,就把值作为结果。

class OperatorDemo8 {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;

        //获取两个数中的最大值。
        int c = (a > b) ? a : b;
        System.out.println(c);
    }
}

  3、举例
    A:获取三个数中的最大值。
      提示:以后我再说数据的时候,如果没有说数据类型,默认是int类型。
    B:判断两个数据是否相等。
    
    分析A:
      a:定义3个int类型的变量。
      b:先比较前两个数据,获取到最大值。
      c:把前两个的最大值和第三个数据进行比较。得到最大值。
    分析B:
      a:定义两个int类型的变量。
      b:用比较运算符比较即可。

class OperatorDemo9 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;

        //先比较前两个数据,获取到最大值。
        int temp = (a > b) ? a : b;

        //把前两个的最大值和第三个数据进行比较。得到最大值。
        int max1 = (temp > c) ? temp : c;
        System.out.println(max1);

        //合并写法
        int max2 = a > b ? (a > c ? a : c) : (b > c ? b : c);
        System.out.println(max2);

        System.out.println("--------------");

        //定义两个int类型的变量。
        int x = 10;
        int y = 20;

        //用比较运算符比较即可。
        //boolean flag = (x == y) ? true : false;
        boolean flag = (x == y);
        System.out.println(flag);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值