黑马程序员技术交流社区
标题:
++问题?求解决!!
[打印本页]
作者:
7℃洋
时间:
2012-10-31 22:23
标题:
++问题?求解决!!
int x=3,y;
y=x+++++x*2+x+++++x;
System.out.println(y);
请问算出来的值为什么是25,而不是18!
作者:
樊鹏飞
时间:
2012-10-31 22:35
本帖最后由 樊鹏飞 于 2012-10-31 22:45 编辑
++在前:先运算再赋值
++在后:先赋值再运算
结果如图所示
1.(x++)取值3,取值完后做运算变成了4.
2.(++x*2)中,此时x已变为4,又++在前 先运算 变成了5, 式子运算结果为10;
3.(x++)中,++在后 所以先取值为5,之后做运算,x变成了6;
4.(++x)中,++在前 所以先运算 因为上一步中x已经为6 所以这里x变成了7;
最后将运算结果相加 3 + 5*2 + 5 + 7 = 25
q1q1.jpg
(7.52 KB, 下载次数: 27)
下载附件
2012-10-31 22:35 上传
作者:
坚持不懈
时间:
2012-10-31 22:35
本帖最后由 坚持不懈 于 2012-10-31 22:37 编辑
y=x++ + ++x*2+x++ + ++x;
3+5*2+5+7
先使3 下次使用是4 ++x就是4+1=5 5*2 x++ X是5 下次使是6 ++X 就是6+1
作者:
林剑
时间:
2012-10-31 22:35
本帖最后由 林剑 于 2012-10-31 22:39 编辑
为什么我运行了报错?
作者:
张利
时间:
2012-10-31 22:37
x+++++x*2+x+++++x相当于(x++)+(++x)*2+(x++)+(++x)
从左往右 x++ 先运算 所以是3,然后自增变成4;接着第二个++x,先自增再运算,所以是5*2,第三个x++先运算 所以是5,再自增变成6,最后++x先自增变成7,再运算
3 + 5*2 + 5 + 7=25
4, 5, 6, 7
作者:
林志进
时间:
2012-10-31 23:27
够简写的啊,连括号都不加= =!。。
作者:
周斌
时间:
2012-11-1 00:08
本帖最后由 周斌 于 2012-11-1 00:12 编辑
优先级 运算符 结合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右ð左
3 * / % 左ð右
4 +(二元) -(二元) 左ð右
5 << >> >>> 左ð右
6 < > <= >= instanceof 左ð右
7 = = != 左ð右
8 & 左ð右
9 ^ 左ð右
10 | 左ð右
11 && 左ð右
12 || 左ð右
13 ?: 右ð左
14 = *= /= %= += -= <<= >>= >>>= &= ^= |= 右ð左
根据上面的优先级可以把式子变成这个样子
y=((x++ + (++x*2) ) + x++ ) + ++x;
3 + 10 + 5 + 7 = 25
作者:
丁桂松
时间:
2012-11-1 07:30
虽然知道为什么,但是强烈谴责这样写代码的人。简直是没事找事,无聊之极。
作者:
林剑
时间:
2012-11-1 08:01
不加括号编译报错啊,你们有试过吗
作者:
7℃洋
时间:
2012-11-5 15:17
不是这样写 是我们老师布置的题目!
作者:
杨政
时间:
2012-11-5 15:25
x++为3 ++x为4 代入即可。
作者:
黄正根
时间:
2012-11-7 00:50
这是个简单的赋值运算题目
考察你对++赋值的理解
按我的理解就是 ++ 在前是先进行自增再赋值 ++在后是先进行++之前的运算!
代码如下:
class Temp
{
public static void main(String[] args)
{
int x=3,y;
y=(x++)+(++x)*2+(x++)+(++x);
//y=(x为3)3(自增赋值x=4)+(再自增1 x=5)5*2+(继续取x=5)5(x自增1赋值x=6)+(x再自增1赋值x=7)7=25;
System.out.println("y="+y);
}
}
作者:
HeiMa-黄倲江
时间:
2012-11-7 04:06
哥们我飘过
作者:
坚持不懈
时间:
2012-11-7 16:56
{:soso_e183:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2