zoukankan      html  css  js  c++  java
  • 基础部分(二)运算符

    1.自增自减

    ++i和i++的区别在于赋值和自增的顺序不同

    public class Demo03 {

        public static void main(String[] args) {

            //++ --   自增,自减  一元运算符

            int a =3;

            int b=a++;  //执行完这行代码后,先给b赋值,再自增

            //a++ ---> a=a+1

            System.out.println(a); // 4

     

            //a=a+1

            int c=++a;  //执行完这行代码前,先自增,再给c赋值

            System.out.println(a);//  5

            System.out.println(b);//  3

            System.out.println(c);//  5

     

            //幂运算 2^3=8 用一些工具类

            double pow =Math.pow(2,3);

            System.out.println(pow);

        }

    }

     

    2.位运算

    public class Demo05 {

        public static void main(String[] args) {

            /*

            A=0011 1100

            B=0000 1101

     

            A&B=0000 1100

            A|B=0011 1101

            A^B=0011 0001 (异或,不同为1)

            ~B =1111 0010

     

            2*8=16 2*2*2*2

            <<  *2   (左移代表乘2)

            >>  /2   (右移代表除2)

            */

            System.out.println(2<<3);

        }

    }

     

    3.扩展运算

    public class Demo06 {

     

        public static void main(String[] args) {

            int a=10;

            int b=20;

            a+=b;//a=a+b

            a-=b;//a=a-b

            System.out.println(a); // 10

            /*字符串连接符 + 两边出现String类型,则会把两边都变为String类型进行连接*/

            System.out.println(""+a+b); //1020

            System.out.println(a+b+""); //30

     

            //三元运算符  ?:

            //x ? y : z

            //如果x==true,z则结果为y,否则为z

            int score=50;

            String type =score<60?"不及格":"及格"; //必须掌握,类似if

            System.out.println(type);//不及格

        }

    }

    4.运算符的优先级

    所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。

    Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性。

    表1 运算符的优先级

    优先级

    运算符

    结合性

    1

    ()、[]、{}

    从左向右

    2

    !、+、-、~、++、--

    从右向左

    3

    *、/、%

    从左向右

    4

    +、-

    从左向右

    5

    «、»、>>>

    从左向右

    6

    <、<=、>、>=、instanceof

    从左向右

    7

    ==、!=

    从左向右

    8

    &

    从左向右

    9

    ^

    从左向右

    10

    |

    从左向右

    11

    &&

    从左向右

    12

    ||

    从左向右

    13

    ?:

    从右向左

    14

    =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>=

    从右向左


    使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。例如下面的表达式:

    (x-y)*z/5

    在这个表达式中先进行括号内的减法运算,再将结果与 z 相乘,最后将积除以 5 得出结果。整个表达式的顺序按照从左向右执行,比较容易理解。

    再来看一个复杂的表达式,如下所示。

    --y || ++x && ++z;

    这个表达式中包含了算术运算符和逻辑运算符。根据表 1 中列出的优先级,可以确定它的执行顺序如下:
    ① 先计算 y 的自减运算符,即 --y。
    ② 再计算 x 的自增运算符,即 ++x。
    ③ 接着计算 z 的自增运算符,即 ++z。
    ④ 由于逻辑与比逻辑或的优先级高,这里将 ② 和 ③ 的结果进行逻辑与运算,即 ++x && ++z。
    ⑤ 最后将 ④ 的结果与 ① 进行逻辑或运算,即 --y||++x&&++z。

    如果没有上述对该表达式执行顺序的说明,第一眼看到它时将很难识别优先级。对于这类问题,可以通过添加小括号使表达的顺序更加清晰,而不用去查优先级表。如下所示为改进后的表达式。

    (--y)||((++x)&&(++z));

    技巧:记住这么多运算符的优先级是比较困难的,因此读者应该在实际应用中多多练习。

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/alljust4u/p/13200386.html
Copyright © 2011-2022 走看看