面试题,求大佬解运算的过程。懵逼了

冬竹️ 2021-01-22 05:59:25
...全文
304 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38230472 2021-01-25
  • 打赏
  • 举报
回复
 //       int sum=++s+b++%b--*++a+c++;
//        int sum1=(++s)+b++%b--*(++a)+c++;
//        int sum1=(s+1)+b%(b+1)*(a+1)+c;
//        int sum1=(s+1)+(b%(b+1))*(a+1)+c;
//        int sum1=(s+1)+(b%(b+1))*(a+1)+c;
          int sum1=1+(-4%-3)*3+1;
冬竹️ 2021-01-23
  • 打赏
  • 举报
回复
引用 4 楼 是赵敢敢啊的回复:
c 语言好像也是一样的运行结果
谢谢大佬,很详细,我明白了。
是赵敢敢啊 2021-01-23
  • 打赏
  • 举报
回复
c 语言好像也是一样的运行结果
是赵敢敢啊 2021-01-23
  • 打赏
  • 举报
回复

public static void main(String[] args) {
        int a = 2;
        int b = -4;
        int c = 1;
        int s = 0;
        int sum = ++s + b++ % b-- * ++a + c++;

        /**
         *  按照java的运算符优先级 ++/-- > * / % >+ -
         *  所以运算顺序如下
         *      ++s 先加后用  b--先用后减
         *      sum = ++s + b++ % b-- * ++a + c++
         *      ① 因为 ++ -- 的运算符优先级最高所以 先运算 ++ --
         *          sum = 1 + -4 % -3 * 3 + 1
         *          此时 s = 1  b = (-3)-- = -4
         *              a = 3  c = 2
         *      ② * % 的处于此运算公式的第二优先级,从左到右
         *         因此先运算 -4 % -3 = -1
         *         在运算 -1 * 3 = -3
         *         sum = 1 + -3 + 1;
         *      ③ sum = 1 - 3 + 1 = -1
         *
         */
        System.out.println("a:" + a);
        System.out.println("b:" + b);
        System.out.println("c:" + c);
        System.out.println("s:" + s);
        System.out.println("sum:" + sum);
    }

qybao 2021-01-23
  • 打赏
  • 举报
回复
这种问题,要给出编译器执行指令的顺序的前提才能确保计算结果。否则不同的编译器可能运行结果不同,毫无意义的问题。
i__0o0__ 2021-01-22
  • 打赏
  • 举报
回复
++s + b++ % b-- * ++a + c++ 1 + -4 % -3 * 3 + 1 先计算s+1后代入 使用原值-4 前一处执行了b++,加一后代入 计算a+1后代入 使用原值1 ++x表达式要对x计算后再使用,x++是先使用x原值后再计算

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧