你掌握运算符优先级了吗

Posted 超人汪小建(seaboat)

tags:

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

本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识。一共99节课,每节课只需几毛钱。
作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书写作、运动、画画。崇尚技术自由,崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解Java并发编程》、《图解数据结构与算法》、《人工智能原理科普》。

关于优先级

有些运算使用一个运算符便能实现,但有时也需要若干个运算符一起组合来实现某个运算,这时就涉及到运算符优先级问题。比如“int c = 4 > 3 ? 1 : 2;”,这是非常常见的条件运算符和赋值运算符结合的使用方式,根据条件判断决定将某个数值赋值给变量 c。

优先级例子

看下面这个例子,我们主要关注 if (a + 1 == 1 && b == 0) ,if 条件一共包含了四个运算符,根据运算符的优先级大小,程序执行时会先执行 + 运算符,接着再执行第一个 == 运算符,然后再执行第二个 == 运算符,最后才是执行 && 运算符。

输出如下。

14个优先级

Java 中的运算符可以分为 14 个优先级,优先级越高则越先执行。下表描述了 Java 运算符的优先级,优先级值范围为 1-14,值越小优先级越高。可以看到括号运算符是最高的,而赋值运算符则是优先级最低。结合顺序是指相同优先级运算符的运算顺序,我们熟悉的数学上的运算都是从左往右的,但 Java 运算符中有一些却是从右往左的。

复杂的表达式

上面的表格中有这么多不同优先级的运算符,当它们混到一起使用时如何才能正确地理解这些表达式呢?比如下面例子,看到变量 c 长长的一串符号是不是有点犯晕?我们按优先级高低一步步来分析,首先是计算优先级为 2 的自增和自减运算符,c = 4 + 2 * 4 / 2 >> 2 % 4,执行后变量 a、b 分别为 4 和 1;第二轮计算优先级为 3 的乘除取余等运算,c = 4 + 4 >> 2;第三轮计算优先级为 4 的加减法运算,c = 8 >> 2;最后是计算优先级为 5 的移位运算,最终结果是 c = 2。

输出结果如下。

结合顺序

当有多个运算符参与运算时,执行的顺序是先考虑优先级,而如果存在相同优先级的情况下则是按结合顺序进行执行。继续通过下面的例子来理解结合顺序,由于从左向右的结合顺序我们在数学上早已见惯了,所以我们看看从右向左结合的例子。这个例子使用了两个条件运算符进行嵌套,对于“a != 3 ? b : b == 3 ? 1 : 0”,我们先计算“b == 3 ? 1 : 0”得到的结果是 1,然后再计算“a != 3 ? b :1”,最终的结果是 1,所以变量 c 为 1。

不要死记硬背

在实际程序开发过程中没必要去死记硬背运算符的优先级,而且我们要尽量保证简洁地使用运算符,在多个运算符组合时则可以通过括号运算符来实现,比如“a = b + c >> 2”可以写成“a = (b + c) >> 2”,这样就非常清晰了。还有,比如前面复杂的例子,我们可以通过下面的括号形式使运算更加清晰明了。

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

你掌握运算符优先级了吗

这些常见的手写题,你掌握了吗

跳槽?面试软件测试需要掌握的7个技能Get了吗?

跳槽?面试软件测试需要掌握的7个技能Get了吗?

多个岗位需要的sql语言 你掌握了吗?简单例子+详细代码带你一文掌握

多个岗位需要的sql语言 你掌握了吗?简单例子+详细代码带你一文掌握