美文网首页
java中运算符的优先级

java中运算符的优先级

作者: 叫子非鱼啊 | 来源:发表于2020-06-20 22:41 被阅读0次

题目

写出下列表达式的值,设:x=3,y=17,yn=true。
(1)x + y * x-- = 54
(2)-x * y + y = -34
(3)x < y && yn = true
(4)x > y || !yn = false
(5)y != ++x ? x : y = 4
(6)y++ / --x = 8

最近看到这样的一道题目,初看之下考的运算符的优先级,但仔细一看发现还有点别的东西在里边。

测试代码

package test;


/**
 *
 * 
 写出下列表达式的值,设:x=3,y=17,yn=true。
(1)x + y * x-- = 54
(2)-x * y + y = -34
(3)x < y && yn = true
(4)x > y || !yn = false
(5)y != ++x ? x : y = 4
(6)y++ / --x = 8
 *
 */
public class Test {
    public static void main(String[] args) {
        test1(3,17);
        test2(3,17);
        test3(3,17,true);
        test4(3,17,true);
        test5(3,17);
        test6(3,17);
    }
    
    public static void test1(int x,int y) {
        System.out.println("x + y * x-- 计算结果"+(x + y * x--));
    }
    public static void test2(int x,int y) {
        System.out.println("-x * y + y 计算结果"+(-x * y + y));
    }
    public static void test3(int x,int y , boolean yn) {
        System.out.println("x < y && yn 计算结果"+(x < y && yn));
    }
    public static void test4(int x,int y , boolean yn) {
        System.out.println("x > y || !yn 计算结果"+(x > y || !yn));
    }
    public static void test5(int x,int y) {
        System.out.println("y != ++x ? x : y 计算结果"+(y != ++x ? x : y));
    }
    public static void test6(int x,int y) {
        System.out.println("y++ / --x 计算结果"+(y++ / --x));
    }
}

输出结果

x + y * x-- 计算结果54
-x * y + y 计算结果-34
x < y && yn 计算结果true
x > y || !yn 计算结果false
y != ++x ? x : y 计算结果4
y++ / --x 计算结果8

解析

运算符的优先级

既然结果已经出来了,我们当然是要看一下为什么会是这样的结果。下图是百度百科中的一张运算符优先级图。

image
  • 优先级1级为最高优先级
  • 结合性是指运算符结合的顺序,通常都是从左到右。
没有自身元素操作的运算

对比优先级就可以解释这些没有对自身元素进行操作的比较结果了

-x * y + y 计算结果-34
x < y && yn 计算结果true
x > y || !yn 计算结果falsey++ / --x 计算结果8
带有自身操作的简单运算

而对于这样的一个y++ / --x 计算结果8表达,我们要知道两点

  • ++ -- 的运算优先级大于/
  • ++ -- 出现在前面,自身先自增1在计算,在后边则反之。

所以实际计算的是int型的17/2(int类型计算的精确度)

带有自身运算的多次取值问题

最后就是这两个计算了,也是比较迷惑性的计算

y != ++x ? x : y 计算结果4

x + y * x-- 计算结果54

对于三目运算符,我们可以理解成if else语句就好了,为真返回第一个,为假返回第二个值。

当++ -- 操作自身元素时,计算表达式是什么时候将内存中的值取出来计算的。

这也是为什么造成y != ++x ? x : y 计算后,取到的值为4,而x + y * x--计算时第一个x为3,不为2的原因。

我们写这样的一个测试

    public static void main(String[] args) {
        int x = 3;
        System.out.println("x + x++ = "+ (x + x++));
        x = 3;
        System.out.println("x++ + x = " + (x++ + x));
    }

结果

x + x++ = 6
x++ + x = 7

从结果来看,等于6是因为第一个x取到的值是3,第二个取到的值仍然是3(++在后先取出x值,x再自增1).而等于7的是x++取到值后,x自增1重新复制给x,所以第二次取到的就是4,答案就是7了,由此就可以解释x + y * x-- 计算结果54的结果为什么是54了。

最后

x = 3;
y = 17;

y != ++x ? x : yy != x++ ? x : y 的计算结果会一样吗?

    public static void main(String[] args) {
        int x = 3;
        int y = 17;
        System.out.println("y != ++x ? x : y = "+ (y != ++x ? x : y));
        x = 3;
        y = 17;
        System.out.println("y != x++ ? x : y =" + (y != x++ ? x : y));
    }

先自己算一下结。

答案是:

y != ++x ? x : y = 4
y != x++ ? x : y =4

相关文章

  • ++运算符,那些年我们错过的运算过程

    1、运算优先级 在Java中运算符的学习中我们可以了解到,运算符是有优先级之分。所谓的优先级就是一个表达式...

  • Java运算符优先级

    Java运算符优先级

  • Java的运算符

    Java有4大类运算符:算术运算、位运算、关系运算和逻辑运算。 运算符的优先级 模运算符 Java中,模运算符不止...

  • Java中运算符的优先级

    所谓优先级,就是在表达式中的运算顺序。Java 中常用的运算符的优先级如下表所示: 级别为 1 的优先级最高,级别...

  • js运算符优先级

    这张运算符优先级表中,排在越上面的运算符优先级越高

  • Java 从入门到放弃 入门篇(控制程序流程一)

    Java 运算符 优先级;运算符的优先级决定存在多个运算符时一个表达式的计算顺序,最简单的规则就是乘法和除法在加减...

  • 2021-04-16

    关于:前序、中序、后序表达式 优先级:每个运算符都有一个优先级,高优先级的运算符优先低优先级的运算符; 唯一能够改...

  • Java基础语法(一)

    1.Java优先级 1.1运算符优先级列表 优先级DemoCode: n=1 2.引用数据类型 2.1 Scann...

  • Java基本语法:一些小知识点

    运算符的优先级: 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。 1. 比较运算符的结果事boole...

  • JS笔记8:运算符及优先级

    1. 运算符 2. 运算符优先级 优先级运算符优先级 口诀括号一, //括号运算符[] ()单目二;...

网友评论

      本文标题:java中运算符的优先级

      本文链接:https://www.haomeiwen.com/subject/fmhnxktx.html