我有一个小问题,使用前缀和后缀运算符对数字执行减法。 这是我的计划:
public class postfixprefix
{
public static void main (String args[])
{
int a = 5;
int b;
b = (a++) - (++a);
System.out.println("B = " +b);
}
}
这样做,理论上我应该得到0作为答案,但是,我得到-2。
当我尝试单独尝试增加此程序中的值时:
public class postfixprefix
{
public static void main (String args[])
{
int a = 5;
int b, c;
b = a++;
c = ++a;
System.out.println("B = " +b);
System.out.println("C = " +c);
}
}
我得到的值为B = 5,C = 7.
所以我认为'c'从'b'获取'a'的值(如果我错了请纠正我),但我想知道的是
答案 0 :(得分:2)
如果您逐步完成此操作,您可以看到会发生什么:
b = (a++) - (++a); //a is now 5
b = 5 - (++a); //read a, then increment it. a is now 6
b = 5 - 7; //increment a, then read it. a is now 7
b = -2
如果你这样做,你会得到:
b = (++a) - (a++); //a is now 5
b = 6 - (a++); //increment a, then read it. a is now 6
b = 6 - 6; //read a, then increment it. a is now 7
b = 0
答案 1 :(得分:1)
int a = 5;
int b, c;
b = a++;
c = ++a;
关于此代码b的值为5,因为在完成分配后发布修订增量/减量。所以价值是5。
c的值为7,因为前缀增量/减量在完成分配之前发生。因此值为7,因为之前的语句将a的值设为6.
关于此代码
int a = 5;
int b;
b = (a++) - (++a);
System.out.println("B = " +b);
当应用括号时,您的前缀/后缀操作将首先以(a++) - (++a);
从左到右完成。
首先,如果我们从左到右
(a++) -(++a)
1. (a++) -- Take 5 from a.
2. (++a) -- 5 becomes 6 with ++a take 6.
3. (a++) - (++a) -- Subtract results of (a++) - (++a) operations which makes it -2.
首次查询的解决方案 - 如何让它不从'b'获取'a'的值,
int a = 5;
int temp = a;
int b, c;
b = a++;
c = ++temp;
System.out.println("B = " +b);
System.out.println("C = " +c);
**首先查询的解决方案已经由Sir @Keppil **
很好地解释了答案 2 :(得分:1)
b = a ++; 的意思是:
c = ++ a 的意思是:
b =(a ++) - (++ a) 的意思是:
答案 3 :(得分:1)
所以我认为'c'从'b'取'a'的价值(如果我错了请纠正我),但我想知道的是1)我怎么能不接受'b'的'a'值
它不是这样的,c = ++a;
值取自b = a++;
语句中的唯一值,a在递增但是在为b赋值后,然后c = ++a;
a再次递增并分配给c(因为这是现在的预增量)
2)使用前缀 - 后缀,当我们减去它时,我可以将0作为答案。
你可以首先使用:b = (++a) - (a++);
作为第一个增量,然后从第一个a(仍为6)减去第二个a(现在是6)。然后a的最终值是7