zoukankan      html  css  js  c++  java
  • Java 运算符-=,+=混合计算详解

    +=与-=运算符混合计算解析:

    int x = 3;
    x += x -= x -= x += x -= x;
    详解:算数运算按运算符优先级运算,从右至左计算。

    1. x=x-x; 实际为 3 - 3 计算结果为0;
    2. x=x+x; 实际为 3 - 0,0是第1步结果,计算结果为3;
    3. x=x-x; 实际为 3 - 3,3是第2步结果,计算结果为0;
    4. x=x-x; 实际为 3 - 0,0是第3步结果,计算结果为3;
    5. x=x+x; 实际为 3 + 3,3是第4步结果,计算结果为6。

    表达简化后:x=x+(x-(x-(x+(x-x))));
    总结:表达式里面运算符优先级相同,显示x初始值都为3,从右到左计算,最终x为6.

    *,+,+=,-=运算符混合计算解析:

    int y = 4;

    y += y * (y += y) + y + y * (y -= y + 1);

    详解:算数运算符等级:

    等级    符号    名词                 结合性

    1         ()        圆括号              从左到右

    3          *           乘                  从左到右

    4         +           加                  从左到右

    14      +=   混合赋值运算符    从右到左

    14      -=    混合赋值运算符    从右到左

    按运算符规则计算:

    1.分析先计算+=的右边y * (y += y) + y + y * (y -= y + 1);

    2.分析从左至右分解y * (y += y) + y + y * (y -= y + 1);

    3.最先计算y * (y += y)。最终分析步骤如下:

     

    1,2:y*(y=y+y);实际为4*(4+4),计算结果为32,y=8;

    3:32+y;实际为32+8,计算结果为40,y=8;

    4,5,6:y*(y-=y+1);实际为8*(8-(8+1)),计算结果为-8,y=-1;

    7:40+(-8),计算结果为32.y=-1;

    8:y=y+32 ,实际为4+32,计算结果为36,y=-1.

    最终y结果为36.表达式简化后:y=y + y * (y = y+y) + y + y*(y = y - (y+1));

    总结:熟悉运算符优先等级,按步骤解析表达式一步一步计算。注意-=,+=计算后会修改掉变量的值。

    备注:
    作者:Shengming Zeng
    博客:http://www.cnblogs.com/zengming/

    本文是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。
    <欢迎有不同想法或见解的同学一起探讨,共同进步>

  • 相关阅读:
    MPlayer 开始支持RTSP/RTP流媒体文件
    Linux(CentOS 6.4)系统中安装mplayer
    IP实时传输协议RTP/RTCP详解
    --without-v4l ,make clean, 重新make即可。
    关于IP数据包首部校验字段的理解
    转[总结]FFMPEG视音频编解码零基础学习方法 .
    指针为什么分类型
    IOS-ARC和垃圾回收机制
    IOS-frame和bounds有什么不同
    iOS-消息推送机制的实现
  • 原文地址:https://www.cnblogs.com/zengming/p/7310274.html
Copyright © 2011-2022 走看看