黑马程序员技术交流社区

标题: 求值 [打印本页]

作者: pojian    时间: 2016-3-13 10:59
标题: 求值
设 int a=12,则执行完语句a+=a-=a*a后,a的值是________
A) 552        B) 264      C) 144        D) -264


作者: 我本善良。    时间: 2016-3-13 16:12
是选择C吗     好像就他符合啊
作者: 我本善良。    时间: 2016-3-13 16:15
我运行了一下是 -120呀
作者: 叫我超哥    时间: 2016-3-13 16:57
算了下,d
作者: 阿云    时间: 2016-3-15 12:14
结果不是120么
作者: 地球人    时间: 2016-3-15 13:38
步骤应该是a*a=144;     a+=a及a=a+a=24;    然后是-=及a=a-144=24-144=-120
作者: 地球人    时间: 2016-3-15 13:40
步骤为 a*a=144;然后+=及a=a+a=12+12=24,然后-=及a=a-144=24-144=-120
作者: Banana_uSuOO    时间: 2016-3-15 14:08
从又往左看:a-=a**即a=a-a*a运行完后a=-132,再看左边,此时变为a+=-132,即a=a+(-132),,-132+-132=-264,菜鸟新人分析,不知道对不对。
作者: lgdbest    时间: 2016-3-20 13:06
我算了一下 是-120,运行也是。。。没有正确答案了,好坑啊
作者: lvlup200    时间: 2016-3-21 15:30
  1. // 第一步,执行a*a,因为*优先级高于-=扩展运算符
  2.                 // 第二步,执行a-=144(a*a的值)
  3.                 // 第三步,执行a+=-132,但这里的参与到计算时总是保持值为12,为什么?
  4.                 // a+=a-=a*a;执行类似于以下步骤
  5.                 /*
  6.                  * int k = a * a;
  7.                  * int l = a - k;
  8.                  * a = a + l;
  9.                  */
  10.                 //直到最后才真正赋值到变量a中
复制代码

作者: wxf468907066    时间: 2016-3-21 21:08
运算符的优先级:  * 大于 +=和-=,从右算过去就是-120
作者: xiaochenu    时间: 2016-3-22 11:35
是-120.呀,先算乘,再从左到右
作者: Poul    时间: 2016-3-22 13:45
a+=a-=a*a是不是等价于a=a+(a-a*a)?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2