后缀自运算符执行过程详解 java(a++,a--)

以下面这道题为例。以下过程是解释这个结果的一种模型。笔者计算机组成原理理解不深刻,描述具体执行过程时可能有误,欢迎指正。

以下代码的运行结果正确的是()

byte a = 5;
int b, c, d; 
b = a += a -= a *= a++;
c = b *= b += b += --b;
d = c + 2;
System.out.println(d > b ? a : c);

A. -15
B. 15
C. 100
D. 35

机制:

1.运算符优先级:= 低于 ++。

2.后缀自运算符,在下一次该变量被使用时执行。

3.计算机在运算基本数据类型时,先将值复制一份到加法寄存器中。当两个操作数都计算出具体值后开始计算。

根据上述机制中的3条,我们来梳理一下具体的运行过程。

以byte a = 5; b = a += a -= a *= a++; 为例分析;

  1. 计算 = 右侧表达式。此时a的值为5,计算机将复制一份此值到加法器存储空间中 ---> 加载 += 操作符 ---> 计算右侧表达式(a-=a*=a++)
  2. 将(a-=a*=a++)看作一个新任务,复制一次a的值到加法器存储空间中,此时a的值任为5。---> 加载操作符 ---> 接下来操作。 
  3. 不断重复上述过程一直到最后一个表达式 a++。根据机制2可知,++操作将在下一次变量a被调用之前执行。我们此时先将这个操作挂载到变量a上搁置,稍后处理。然后从a得到的值5(此时++还未执行)赋值到加法器中进行之前的运算。
  4. 不断根据计算得到的值回溯。最后到达 b= a += 。此时对于变量a来说有两个操作要执行 = 和 ++(之前挂载的)。由于++的优先级高于+=,所以先执行,a从5到6。接下来执行 +=, 此时+法部分已经运算完成,结果放在加法器中的对应内存中(在这里是-15),执行赋值运算,将-15给a,此时a的值更新为-15
  5. 最后用a的值传递给b,b也为-15;至此本行语句结束。
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值