[英]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=5
和y=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.