Java——运算符

Java中使用的运算符有算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符等。

一、算术运算符


算术运算符和他们在数学里起到的作用是一样的。

     //基本四则运算
     c = a + b; //  “+”加法:左右操作数相加
     c = a - b; //  "-"减法:左操作数减右操作数
     c = a * b; //  “*”乘法:左右操作数相乘
     c = a / b; //  “/”除法:左操作数除以右操作数
     c = a % b; //  “%”取余:左操作数除以右操作数得到其余数

     //自增/自减运算
     a++; //  自增:操作数值加1
     b--; //  自减:操作数值减1

     //增量运算符
     a += b; // 该式等价于 “a = a + b” 下同
     a -= b;
     a *= b;
     a /= b;
     a %= b;

注:

  1. 自增自减操作还包括--a以及++a前置操作符的用法。操作符后置先用再修改,操作符前置先修改再用
  2. 除法和取余操作时,右操作数不能为0。
     int a = 20;
     int b = 10;
     int c = 0;
     c = a + b; // c = 30
     c = a - b; // c = 10
     c = a * b; // c = 200
     c = a / b; // c = 2
     c = a % b; // c = 0 
     a++; // a = 21
     b--; // b = 9
     a += b; //a = 30

二、关系运算符


     a == b; // 判断a与b是否相等,相等则条件为真
     a != b; // 判断a与b是否不等,不等则条件为真
     a > b; // 判断a是否大于b,大于则条件为真
     a < b; // 判断a是否小于b,小于则条件为真
     a >= b; // 判断a是否大于等于b,大于等于则条件为真
     a <= b; // 判断a是否小于等于b,小于等于则条件为真
     int a = 10;
     int b = 20;
     a == b; // false
     a != b; // true  
     a > b; // false
     a < b; // true
     b >= a; // true
     b <= a; // false

三、逻辑运算符


逻辑运算符有三个&&||,运算结果都是boolean类型。

1、逻辑与运算(&&)

有假为假,全真为真。

     int a = 10;
     int b = 20;
     a == 10 && b == 20; // 真 && 真 => 真
     a == 10 && b > 100; // 真 && 假 => 假
     a > 100 && b == 20; // 假 && 真 => 假
     a > 100 && b > 100; // 假 && 假 => 假

2、逻辑或运算(&&)

有真为真,全假为假。

     int a = 10;
     int b = 20;
     a == 10 || b == 20; // 真 && 真 => 真
     a == 10 || b > 100; // 真 && 假 => 真
     a > 100 || b == 20; // 假 && 真 => 真
     a > 100 || b > 100; // 假 && 假 => 假

3、逻辑非运算(!)

真假互换。

     int a = 10;
     !(a == 10); // !(假) => 真
     !(a != 10); // !(真) => 假

4、短路逻辑运算符

&&||遵守短路求值的规则,当使用&&||时,两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

     System.out.println(10 > 20 && 10 / 0 == 0); // false,&&左侧结果为false,则无需计算右侧
     System.out.println(10 < 20 || 10 / 0 == 0); // true,||左侧结果为true,则无需计算右侧

注: 上述逻辑运算符右侧 10/0是会造成程序异常的,但是却正常运行了,因为它们符合短路求值规则。&|如果表达式结果为boolean时,也表示逻辑运算,但不遵守短路规则,会抛出异常。

四、位运算符


可以进行数据操作的最小单位是比特。位操作数按照二进制位进行运算,位运算符包括:

  • 一元运算符:~
  • 二元运算符:&|^<<<<>>>

1、按位与(&)

全1为1,有0为0

     int a = 10;
     int b = 20;
     System.out.println(a & b); // 0000 0000

10&20

2、按位或(|)

全0为0,有1为1

     int a = 10;
     int b = 20;
     System.out.println(a | b); // 0001 1110

10|20
注: &|操作数为boolean类型时,表示逻辑运算。

3、按位取反(~)

0变为1,1变为0

     int a = 0x0;
     System.out.printf("%x\n", ~a) // ffff

~0

注: 0x表示十六进制数字。%x表示十六进制输出。

4、按位异或(^)

相同为0,相异为1

     int a = 0xf;
     int b = 0xf;
     System.out.printf("%x\n", a ^ b); // 0

     int a = 0x10;
     int b = 0x20;
     System.out.printf("%x\n", a ^ b); // 0001 1110 = 30

在这里插入图片描述

5、按位左移

最左侧一位舍弃,最右侧补0。

     int a = 60; // 60 = 0011 1100  
     c = a << 2; // 240 = 1111 0000 
     System.out.println("a << 2 = " + c );

注: 左移1位相当于原数字乘2。

6、按位右移

最右侧位舍弃,最左侧补符号位(正数补0,负数补1

     int a = 60; // 60 = 0011 1100  
     c = a >> 2; // 15 = 1111
     System.out.println("a >> 2  = " + c );

示例:

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int avg = b + ((a-b)>>1); // 用于求平均值
    System.out.println(a+"和"+b+"的平均值为:"+avg);
    //a和b相加可能会导致超出溢出,示例中并未溢出。且除法效率低下。
}

7、无符号右移

最右侧位舍弃,最左侧补0

     int a = 60; // 60 = 0011 1100  
     c = a >>> 2; // 15 = 0000 1111
     System.out.println("a >>> 2 = " + c );

注: 右移1位相当于原数字除2。

五、条件运算符


条件运算符也叫三元运算符。该运算符有3个操作数,并且需要判断boolean表达式的值。该运算符的主要是决定哪个值应该赋值给变量。条件运算符格式:A ? B : C
当A为true时,整个表达式为B的值。
当A为false时,整个表达式为C的值。

      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );

表达式不能单独存在,产生的结果要被使用,否则会报错

	int a = 10;
	int b = 20;
	a > b? a : b; //会报错

注: 最后要注意的一点是,运算符都是有其优先级的,在有歧义的表达式上一定要注意带括号,避免歧义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值