簡體   English   中英

前/后增量/減量和運算符順序混淆

[英]Pre/post increment/decrement and operator order confusion

我正在做一些練習,但我對這個感到困惑:

public static int f (int x, int y) {
  int b=y--;
  while (b>0) {
    if (x%2!=0)  {
      --x;
      y=y-2; 
    }
    else { 
      x=x/2;
      b=b-x-1; 
    }
  }
  return x+y; 
} 

b=y--的目的是什么? 因此,例如,當我們第一次進入 while 循環( while (b>0) )時, x=5y=5 b = 4 還是 5? 當我在我的計算機上運行代碼時, b是 5。返回值是 3。我真的不清楚。 對不起,如果我的問題不清楚。

int b=y--; 首先分配b=y然后遞減y ( y-- )。

另請查看前綴/后綴一元增量運算符

這個例子(取自鏈接頁面)演示了它:

class PrePostDemo {
    public static void main(String[] args){
        int i = 3;
        i++;
        // prints 4
        System.out.println(i);
        ++i;               
        // prints 5
        System.out.println(i);
        // prints 6
        System.out.println(++i);
        // prints 6
        System.out.println(i++);
        // prints 7
        System.out.println(i);
    }
}

后遞增/遞減和預增量/減量之間的差異是在 表達的評價

pre-increment 和 pre-decrement 運算符將它們的操作數增加(或減少)1,表達式的值是結果增加(或減少)的值。 相比之下,后遞增和后遞減運算符將其操作數的值增加(或減少)1,但表達式的值是操作數在遞增(或遞減)操作之前的原始值。

換句話說:

int a = 5;
int b;
b = --a;    // the value of the expression --a is a-1. b is now 4, as is a.
b = a--;    // the value of the expression a-- is a. b is still 4, but a is 3.

請記住,程序必須對表達式求值才能完成所有操作 一切都是一個表達式,即使只是隨便提到一個變量。 以下都是表達式:

  • a
  • a-1
  • --a && ++a
  • System.out.println(a)

當然,在表達式的計算中, 運算符優先級決定了表達式的值,就像你在小學學到的PEMDAS 一樣 一些操作符,比如增量/減量,有副作用,這當然很好玩,也是創建函數式編程的原因之一。

我相信 b 等於 5 進入循環,因為

b=y--;

當“--”在變量后面時,它會在操作后遞減它。

這是糟糕的編碼,因為它會使新程序員感到困惑。

該函數假設它是按值傳遞,就像上面的例子(而不是按引用傳遞)獲取y的副本,將其遞減,並將其分配給b 它不會改變在調用函數時傳遞給函數的參數。

崗位增量

x++; 
x += 1; 

遞減

x--; 
x -=1; 

預增量: ++x;
預減:-- --x;

根據 Head First Java 的說法:

x++++x之間的區別:

int x = 0; int z = ++x; 
Produces: x is 1, x is 1
in x = 0; int z = x++; 
Produces: x is 1, z is 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM