2

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

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'中获取'a'的值,以及
  2. 使用前缀 - 后缀,我可以在减去它们时得到 0 作为答案。
4

4 回答 4

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
于 2013-05-09T11:44:09.887 回答
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);

** @Keppil先生已经很好地解释了您第一次查询的解决方案**

于 2013-05-09T11:43:08.200 回答
1

b = a++; 方法:

  1. 将 a 的值赋给 b
  2. 将 a 增加 1

c = ++a 表示:

  1. 将 a 增加 1
  2. 将 a 的值赋给 c

b = (a++) - (++a) 表示:

  1. 获取 a (5) 的值(没有 ++ 的 a)
  2. 将 a 的值增加 1(从而使其变为 6)(a++ 的结果)
  3. 将 a 增加 1 (++a)(从而使其变为 7)
  4. 分配给 b thae 值 5-7=-2(步骤 1 中的 5,步骤 3 中的 7)
于 2013-05-09T11:45:41.993 回答
1

所以我认为'c'从'b'中获取'a'的值(如果我错了,请纠正我),但我想知道的是1)我怎样才能让它不取'的值a'来自'b'

它不是这样的,inc = ++a;值仅取自 a,inb = a++;语句,a 被递增但在将值分配给 b 之后,然后 while c = ++a;a 再次递增并分配给 c(因为这是现在的预递增)

2)使用前缀 - 后缀,减去它们时我可以得到0作为答案。

你可以有这样的:b = (++a) - (a++);因为第一个a首先增加,然后第二个a(现在是6)从第一个a(仍然是6)中减去。然后a的最终值为7

于 2013-05-09T11:45:48.383 回答