运算符

Posted alljust4u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运算符相关的知识,希望对你有一定的参考价值。

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));

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

 

以上是关于运算符的主要内容,如果未能解决你的问题,请参考以下文章

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

如何在 python 中并行化以下代码片段?

JSP 基础语法

获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算

中继片段传播不起作用