运算符和运算符的优先级

运算符总的来说分:算术运算符、赋值运算符、关系/比较运算符、逻辑运算符、位运算符、三元运算符

1、算数运算符

+  -  *  /  %  ++  --

注意:

(1)byte/short/char在运算的时候自动提升为int

(2)整数的运算结果一定是整数

(3)小类型和大类型一起运算的结果一定是大类型

(4)任意整数/0 --ArithmeticException

         非零数字/0.0  非零小数/0   --infinity  无限大

          0.0/0.0   0/0.0   0.0/0  -NaN -非数字

         %取模运算 -- 取余运算

         9%4=1  3%5=3

扫描二维码关注公众号,回复: 2538363 查看本文章

         -9%4=-1  -9%-4=-1   9%-4=1

         %的结果的正负只与%的左边的正负有关,左边为正则为正,左边为负则为负

         5%1.4=0.8   6.3%1.7=1.2

         ++/-- 自增或自减

         ++/--如果在变量之前,那么先自增或自减,然后参与后续运算

         ++/--如果在变量之后,那么先将值取出来参与运算,然后变量再自增或自减

         如:

              int i=6;

              int j=i++ + ++i;  -> 14(6+8)

              int j=++i + i++;  -> 14(7+7)

              byte/short/char 都可以参加自增运算

              char c='b';

              int i=c+2; ->100

              'a'~'z' ->97~122

              'A'~'Z' ->65~90

              '0'~'9' ->48~57

               char c='0'

               int i=c+3; ->51

2、赋值运算符         

         =  +=  -=   *=  /=  %=   &=   |=   ^=   <<=   >>=   >>>=

         byte/short/char可以参与赋值运算

         除了=以外,其余符号都要求这个变量得先有值

         注意:在Java中不支持连等定义但是支持连等赋值

         int i=5;

         i+=i*=i-=3; -> 15

         i=5+(5*(5-3));

         int j=7;

         j -= j *= j++; -> -42

         j = 7 - (7 * 7);

3、关系/比较运算符

         ==(相等)    !=(不等)     >(大于)     <(小于)      <=(小于等于)       >=(大于等于) 

         注意:不支持连着的比较方式

4、逻辑运算符         

         注意:逻辑运算符算的是逻辑值

         &(与)    |(或)    !(非)    ^(异或)    &&(短路与)    ||(短路或)

         true&true=true true&false=false false&true=false

         false&false=false

         true|true=true true|false=true false|true=true

         false|false=false

         !true=false !false=true

         true^true=false true^false=true false^true=true

         false^false=false

         &&:如果前边的表达式的结果为false,则后边的表达式不再运算,整个表达式的结果就确定为false

         ||:如果前边的表达式的结果为true,则后边的表达式就不再运算,整个表达式的结果就确定为true

        注意:||如果在&&的前边可以把&&短路掉而&&不能

5、位运算符

        注意:位运算符针对整数的补码进行运算,所以运算结果也是补码

        &     |      ^     <<     >>     >>>     ~

  >>:将数据转化为补码,然后按照指定的位数向右移动,移出的数据舍弃,如果是正数,高位补0,如果是负数高位补1。

  ~:取反运算,将数据转化为补码后,将所有0变1,1变0   ~i=  - i - 1

    交换值的方式

        方式一:异或法

            int i = 5, j = 9;

            i = i ^ j;

            j = i ^ j; -> j = i ^ j ^ j; -> j = i;

            i = i ^ j; -> i = i ^ j ^ i; -> i = j;

        方式二:加减法

            int i =5, j = 9;

            i = i + j;

            j = i - j; -> j = i + j - j; -> j = i;

            i = i - j; -> i = i + j - i; -> i = j;

       方式三:追尾法

           int i = 5, j = 9;

           int temp = i;

           i = j;

           j = temp;

      总结:三种方式的比较

      异或法的效率是最高的。只能针对整数进行交换,局限性太大

      加减法的效率是低于异或但是高于追尾。理论上可以交换数值类型,但实际上很少用于交换小数

      追尾法的效率是最低的。可以交换任意一个类型的值

6、三元运算符

       格式:逻辑值 ? 表达式1 : 表达式2

       执行顺序:先执行逻辑值,如果逻辑值为true,则执行表达式1;反之则执行表达式2

       三元表达式本身是一个表达式,意味着这个表达式执行完成之后需要有一个结果 --- 这个结果必须能定义对应类型的变量来接住

        a > b ? “abc” : true; -> 没有办法定义一个统一类型的结果来存储,这种写法就是错误的

        double d = a > b ? 3 : 5.25;

        float f = a > b ? ‘a’ : 3.5f;

        练习: 输出分数对应的等级 >=90-A >=80-B >=70-C >=60-D <60-E

        扩展:从控制台获取数据

import java.util.Scanner;

Scanner s = new Scanner(System.in);

int i = s.nextInt(); // 获取整数

double d = s.nextDouble(); // 获取小数

String str = s.next(); // 获取字符串

7、运算符的优先级

    从高到低:(~   !   ++   --)   *   /   %   +   -    算术  <<  >>   >>>    关系    逻辑     &    |   ^    三元    赋值 

    一元>二元>三元>赋值

猜你喜欢

转载自blog.csdn.net/DGHxj_/article/details/81393381