面试题

HeiBoyYang 2011-09-17 06:20:36
偶尔间看到一个面试题:如下别打印 口算结果,分析一下,谁讲的好就得分
int a = 2;
int s1 = a + 3 * a++;
int s1 = (a++) + 3 * a;
2个s1分别是多少
...全文
116 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guozhenyu1990 2011-09-17
  • 打赏
  • 举报
回复
第一个 是8, 也就是 s1 = 2 + 3 * 2; 如果换成 s1 = 3*(a++) + a 结果就是s1=3*2+3=9;主要有个先后顺序问题,就是a 和3 * (a++)的先后顺序。
第二个 11,是 先a = a + 1;因为是先取值,再自增,所以 s1 = 2 + 3 * 3=11; 之所以是3* 3是因为s1 = (a++) + 3 * a ; (a++)在前面。如果换成(a++)在后面s1 = 3 * a + (a++);结果就是 s1 = 3 * 2 + 2 = 8。
如果换成 s1 = 3 * a + (++a);结果就是 s1 = 3 * 2 + 3 =9;
顶下
HeiBoyYang 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 btzbtz 的回复:]
第一个 是8, 也就是 s1 = 2 + 3 * 2; 如果换成 s1 = 3*(a++) + a 结果就是s1=3*2+3=9;主要有个先后顺序问题,就是a 和3 * (a++)的先后顺序。
第二个 11,是 先a = a + 1;因为是先取值,再自增,所以 s1 = 2 + 3 * 3=11; 之所以是3* 3是因为s1 = (a++) + 3 * a ; (a++)在前面。如果换成(a+……
[/Quote]
5楼 分析正确 其它看看5楼的
HeiBoyYang 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuhuipengwhp 的回复:]
int a = 2;
int s1 = a + 3 * a++;
int s1 = (a++) + 3 * a;
2个s1分别是多少?
首先我们来了解一下a++与++a的概念,a++也就是先运算再自加,++a就是先自加,在运算,那么接下来的题目就简单了!
int s1 = a + 3 * a++; 初始值a=2,s1=2+3*(2++); 第一次s1值得到的表达式为s1=2+3*2,结果……
[/Quote]
嗯,很正确,发错
HeiBoyYang 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuhuipengwhp 的回复:]
int a = 2;
int s1 = a + 3 * a++;
int s1 = (a++) + 3 * a;
2个s1分别是多少?
首先我们来了解一下a++与++a的概念,a++也就是先运算再自加,++a就是先自加,在运算,那么接下来的题目就简单了!
int s1 = a + 3 * a++; 初始值a=2,s1=2+3*(2++); 第一次s1值得到的表达式为s1=2+3*2,结果……
[/Quote]
嗯,很正确
btzbtz 2011-09-17
  • 打赏
  • 举报
回复
第一个 是8, 也就是 s1 = 2 + 3 * 2; 如果换成 s1 = 3*(a++) + a 结果就是s1=3*2+3=9;主要有个先后顺序问题,就是a 和3 * (a++)的先后顺序。
第二个 11,是 先a = a + 1;因为是先取值,再自增,所以 s1 = 2 + 3 * 3=11; 之所以是3* 3是因为s1 = (a++) + 3 * a ; (a++)在前面。如果换成(a++)在后面s1 = 3 * a + (a++);结果就是 s1 = 3 * 2 + 2 = 8。
如果换成 s1 = 3 * a + (++a);结果就是 s1 = 3 * 2 + 3 =9;
本人菜鸟,连个最基本的字符串转ASCII都写不出来,感觉这个面试官很脑残,脑残到家了,不知道分析的对不对
wuhuipengwhp 2011-09-17
  • 打赏
  • 举报
回复
int a = 2;
int s1 = a + 3 * a++;
int s1 = (a++) + 3 * a;
2个s1分别是多少?
首先我们来了解一下a++与++a的概念,a++也就是先运算再自加,++a就是先自加,在运算,那么接下来的题目就简单了!
int s1 = a + 3 * a++; 初始值a=2,s1=2+3*(2++); 第一次s1值得到的表达式为s1=2+3*2,结果为8;再这步运算好后,a的值就变为3;

那么第二个表达式int s1 = (a++) + 3 * a变为s1=(3++)+3*3=12;
雨天 2011-09-17
  • 打赏
  • 举报
回复
第一个s1是2+3*2 应该是8,第二个是2+3*3应该是11
成一粒 2011-09-17
  • 打赏
  • 举报
回复
s1=a+3*2->s1=3+6->s1=9(a=3)

s2=a+3*3->s2=4+9->s2=13
ylovep 2011-09-17
  • 打赏
  • 举报
回复
8和12

int s1 = a + 3 * a++; 初始值a=2,s1=2+3*(2++); 第一次s1值得到之后 a进累加
a++表示的是a=2先进行计算,计算完毕之后a加上1;也就是s1求完之后a的值就变为3;

第二个s1=(3++)+3*3=12;


该题应该考的是++这个运算符和各个运算符的优先级。
不知道分析的对不对

67,550

社区成员

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

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