3
假設我有一個數組a [],如果我想改變一個[i]的值並將其改爲零,我可以通過使用temp變量來實現。使用或「|」運算符在java中的語句
int temp = a[i];
a[i] = 0;
但我遇到類似這樣的
int temp = a[i] | (a[i] = 0);
代碼來到我很難理解這一點。請解釋它是否工作?使用相似類型的代碼是否是一種很好的做法?
假設我有一個數組a [],如果我想改變一個[i]的值並將其改爲零,我可以通過使用temp變量來實現。使用或「|」運算符在java中的語句
int temp = a[i];
a[i] = 0;
但我遇到類似這樣的
int temp = a[i] | (a[i] = 0);
代碼來到我很難理解這一點。請解釋它是否工作?使用相似類型的代碼是否是一種很好的做法?
直接代碼的目的是從數組中獲取值並將其在陣列中的位置設置爲0
。
讓我們看看棘手的代碼是如何做到的。
|
運算符是按位運算符。首先,對a[i]
進行評估,無論哪個值都是左操作數。接下來,括號強制a[i] = 0
進行評估。這將數組元素設置爲0
,|
的右操作數現在爲0
。按位執行或使用值0
不會更改其他值。 temp =
右側的整個表達式的值是a[i]
的原始值。這可以在一個聲明中完成簡單代碼所做的一切。
這段代碼很棘手,並不是很好的做法,因爲它很混亂。我絕不會使用這種技術。
我會說這是不好的做法,因爲它看起來像一個非顯而易見的伎倆,它會讓讀者的代碼感到困惑(像你一樣) –
小問題:它是一個數組並不相關。對於'int temp = a |來說,它也是一樣的(a = 0);',如果'a'是一個簡單的'int'。 –
如果你想壓縮代碼,只需將兩個語句放在同一行:'int temp = a [i]; a [i] = 0;'。不是很好,但比那個奇怪的結構要好得多。 – Andreas