黑马程序员技术交流社区

标题: 一道的面试题 ,直接口算 [打印本页]

作者: 林枢    时间: 2011-9-27 21:54
标题: 一道的面试题 ,直接口算
int a =2;
int s1=a+3*a++ ;
int s2 = (a++)+3*a;

s1 和s2 分别是多少
作者: 匿名    时间: 2011-9-27 22:03
9
9
应该都是9,这种问题直接试试,我没试
a++应该是先赋值在修改值,++a应该是先修改值在赋值
作者: 匿名    时间: 2011-9-27 22:05
标题: 回复 沙发 的帖子
不对 第一个还是挺简单的
作者: 匿名    时间: 2011-9-27 23:17
8
15
++的优先级高于*与+,而且第二个式子里的()可以没有,只是让大家看清楚层次的作用。
:loveliness:
作者: 匿名    时间: 2011-9-28 09:44
这个应该是s1=8;s2=15其实只要明白++n或n++的原理就行,++n是吃了饭再去玩,已经吃了,n++是玩完再回来吃饭,玩的时候还没有吃饭。
作者: 匿名    时间: 2011-9-28 10:21
int a=2;
int s1=a+3*a++ ;
int s2=3*a++ + a;

int s3 =(a++) + 3*a;
int s4 =3*a +(a++);
算一算上面的你就会明白了
作者: 匿名    时间: 2011-9-28 10:46
验证一下才知道,这里面学问大了去了,自愧不如
作者: 匿名    时间: 2011-9-28 11:05
第一个是8(a++ 是先赋值,后自加),第二个是15.
作者: 匿名    时间: 2011-9-28 15:07
9
15
可惜错了,还在不解中........
我得翻书了
作者: 匿名    时间: 2011-9-28 17:08
看了感觉是8,11,还很坚定,验证说明我错了 ,学习中
作者: 匿名    时间: 2011-9-28 17:24
int a =2;                       
int s1=a+3*a++ ;                s1=8  //3*a++=6    6+a=8;              此时a=3;
int s2 = (a++)+3*a;             a++ =3;   但是a已经自加变成4         3*a=12;   12+a++=15;

真是琢磨一会啊 !  好题。  长知识了
作者: 匿名    时间: 2011-9-28 21:38
标题: 回复 楼主 的帖子
s1=8,右边式子中第一个a为2,第二个a参与运算时也为2,运算后变为3,所以2+3*2结果为8。
s2=15,右边式子中第一个a为3,自加后a变为4,所以第二个a的值为4,结果为3+3*4=15。
作者: 匿名    时间: 2011-9-29 13:16
第一口算算错了
呵呵
后来弄明白了。
第一个 是2+3*2=8 此后a=3,第二个是先进行a++,此后a=4,结果就是3+3*4=15.
作者: 匿名    时间: 2011-9-29 17:05
s1=8   
s2=15
a++表示的是先运算然后再把a+1后的值赋给a,所以s1=2+3*2   s2=3+3*4
作者: 匿名    时间: 2011-9-29 23:05
偶错了,
a++应该是先赋值在修改值,++a应该是先修改值在赋值 我是知道,但是忘记了a++相当于a=a+1 a的值被修改了




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