2012-03-24 25 views
6

我正在用傳統方式使用XOR ^算子計算兩個short integersXOR。下面是方法 -兩個短整數的異或

short a=197; 
short b=341; 
short y = (short) (a^b); 

然而,XOR總是返回整數,但在我的情況輸入短整型,這就是爲什麼我矮鑄造的XOR輸出。 XOR可以用不同的方式計算(例如:使用BigInteger等),但性能明智(少時間),對於短整數來說最好?在記住性能的同時,我應該首先使用Integer.toBinaryString(number)將每個短整數轉換爲二進制數,然後應用按位XOR?

回答

8
short s1 = ... 
short s2 = ... 
short result = (short) (s1^s2); 

這是異或XOR兩個short最有效的方法一起。它沒有運行到創建BigInteger的開銷,並且演員絕不會導致溢出問題,因爲s1s2short秒。

4

「將每個短整數轉換爲二進制數」的含義並不十分清楚 - 短小已經是一個數字,它的表示本質上是二進制的。

你只是想:

short x = ...; 
short y = ...; 
short z = (short) (x^y); 

您需要的塑像作爲x^y將促進雙方對int,其結果將是一個int。但是,結果必須在short的範圍內,因此在不丟失信息的情況下執行此轉換是安全的。

有關XOR的詳細信息,請參閱section 15.22.1 of the JLSsection 5.6.2有關二進制數字提升的信息。

+0

@EricJ .:你還在看看我沒有圓括號的版本嗎?(x^y)?我修復了一段時間:) – 2012-03-24 22:21:25

+0

是的,我看到更新。撤回評論:-) – 2012-03-24 22:22:04

+0

@JonSkeet:「」將每個短整數轉換爲二進制數「」我的意思是我應該首先使用'Integer.toBinaryString(number)'將每個短整數轉換爲二進制字符串,然後應用'按位XOR' ? – 2012-03-25 07:35:53

1

我不是100%肯定你問什麼,但希望這有助於:

的Java強求兩個操作數爲int類型。這就是爲什麼結果是一個整數。

http://java.comsci.us/syntax/expression/bitwisexor.html

所以你的短褲會自動轉換成int和XOR操作將在整數操作數非常有效地進行。

如果其中一個操作數很長,則這兩種類型都被強制爲一個long。但是,這不適用於你的情況。

底線,因爲您的兩個輸入很短,如果你需要很短的結果,最有效的事情是

short result = (short) (operandA^operandB);