求变量i的值是多少?java笔试

rutine 发布于 2013/03/08 21:41
阅读 1K+
收藏 0

下面是java变量运算赋值问题:

int i = 0;
i--;
int y = i++ + ++i;
上面中y的值是0。特意查了一下,算符的优先级是++高于 +,+高于=,所以++高于=。

int i = 0;
int y = i++;
问题是上面y的值也是0。如果按照算符优先级来讲,应该是1,为什么,求解?

以下是问题补充:

@rutine:看了好多评论都是说++i是运算前加1,i++是运算后加1,这个我知道,但是y=i++ + ++i,解释起来就复杂多了。首先y为0这个结果是没错的。如果我这样解释:++i后i的值为0,i++这个本身不运算先,不过i++中的i值此时也为0,最后0+0再赋值给y,所以y的值为0。最后运算i++,所以i的值为1。但是,注意了:将y=i++ + ++i 变成 i= i++ + ++i,此时i的值是0,这样又怎样解释...? (2013/03/08 22:47)
加载中
2
实迷途其未远觉今是而昨非
实迷途其未远觉今是而昨非

stackoverflow上有2个不错,有人把汇编都贴出来了

有个人这样解释i=i++

i = 0; int tmp = i; i = i + 1; i = tmp;

http://stackoverflow.com/questions/13516689/if-i-0-why-is-i-i-0-in-c

http://stackoverflow.com/questions/4968854/is-i-i-truly-a-undefined-behavior

1
潞邊壹仦貓
潞邊壹仦貓

看来楼主是没有搞清楚i++与++i的区别。

i++是先使用再加1。

++i是先加1后再使用。

这样记就不容易弄错了。

pigpig520
pigpig520
回复 @Glogo : 呃,仅针对你的问题,他已经回答了,i++是先使用后加1,则int y=i++;此时y=0,i的值才变成了1;
pigpig520
pigpig520
回复 @Glogo : 呃,仅针对你的问题,他已经回答了,i++是先使用后加1,则int y=i++;此时y=0,i的值才变成了1;
Glogo
Glogo
正解,也没看出这题目有啥帮助的
1
SaltyEgg
SaltyEgg
第一题是没有任何意义的,它和具体编译器相关。问这个问题的人语言本身学的就有问题
0
曲波
曲波
i++是运算后,i再自加,++i,是运算前自加
0
爪哇扫地僧
爪哇扫地僧
.....请区别++在变量前和++在变量后的优先级。这两个++不同的。
0
恺哥
恺哥
这个面试题有啥意义
恺哥
恺哥
回复 @rutine : 我的团队里,要是有成员写出这样的代码,我肯定让其返工,因为这样的代码可读性太差了。再高的手,看到这个表达式也得反应一会
rutine
rutine
我也不知道,应该考对算符优先级的熟悉程度吧
0
魔力猫
魔力猫
从C时代就折腾人的无聊没用荒唐题目。
0
恺哥
恺哥

引用来自“恺哥”的答案

这个面试题有啥意义
把面试当做了考试,中国的应试教育居然体现在这里了;就像7,8年前,我公司找了一个博士,后来没两天把博士辞掉了,因为他所掌握的的学院派知识在实际的生产过程中毫无用武之地。估计那个哥们解这样的题如同剪手指甲
平兄
平兄
博士??博士程序员,太浪费了
0
jsyang888
jsyang888
无聊   我下面的不写成 a=a+1 不管是 c 还是啥,都给我骂
0
恺哥
恺哥

int y = i++ + ++i;

这是干什么,写代码还是在画画?

返回顶部
顶部