Java:前缀 - 后缀问题

时间:2013-05-09 11:37:56

标签: java subtraction postfix-operator prefix-operator

我有一个小问题,使用前缀和后缀运算符对数字执行减法。 这是我的计划:

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'的值(如果我错了请纠正我),但我想知道的是

  1. 我怎样才能从'b'和
  2. 中取出'a'的值
  3. 使用前缀 - 后缀,我可以减去0作为答案。

4 个答案:

答案 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 ++; 的意思是:

  1. 将b的值分配给
  2. 将a增加1
  3. c = ++ a 的意思是:

    1. 将a增加1
    2. 为c分配
    3. 的值

      b =(a ++) - (++ a) 的意思是:

      1. 获取a(5)(a不含++)
      2. 的值
      3. 将a的值增加1(从而使其为6)(++的结果)
      4. 将a增加1(++ a)(从而使其成为7)
      5. 指定值为5-7 = -2(步骤1为5,步骤3为7)

答案 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