2012-03-24 7 views
6

オペレータを使用して、の2つのshort integersを伝統的な方法で計算しています。私はXORの出力に短いキャストしていますなぜ、以下のMETHOD-2つの短い整数の排他的論理和

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

はXORは常に整数返されたが、私の場合には入力が短整数ですしかし、それはです。 XORはさまざまな方法(例:BigIntegerなどを使用)で計算できますが、短い整数の場合に最適なパフォーマンスが向上します(時間の短縮)?パフォーマンスを念頭に置いて、最初にInteger.toBinaryString(number)を使用して各整数を2進数に変換する必要がありますか?

答えて

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

で、あなたの入力の両方が不足していることを考えます一緒に。 BigIntegerを作成するオーバーヘッドには至らず、先頭にshortの両方があるので、s1s2の両方がキャストされてもオーバーフローの問題は発生しません。

4

「各短い整数を2進数に変換する」という意味は本当にはっきりしません。短いものはすでに数値であり、その表現は当然バイナリです。

ちょうど欲しい:

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

x^yintの両方を推進していきますし、結果はintになるようにあなたは、キャストを必要としています。ただし、結果はshortの範囲内にある必要があります。したがって、情報を失うことなくこのキャストを実行することは安全です。

XORの詳細については、section 15.22.1 of the JLSを参照してください。一般的には、バイナリ数値の昇進に関する情報については、section 5.6.2を参照してください。

+0

@ EricJ: '(x^y)'の丸括弧がないバージョンをまだ見ていましたか?しばらく前に修正しました:) –

+0

うん、更新が見えます。コメントを取消します:-) –

+0

@JonSkeet:各短い整数を2進数に変換する "私は最初に各短い整数を' Integer.toBinaryString(number) 'を使ってバイナリ文字列に変換してから 'ビット単位のXOR'を適用するべきです? –

1

私はあなたが求めているものを100%わからないんだけど、うまくいけば、このことができます:Javaはint型には、両方のオペランドを強制的に変換

。それが結果がintである理由です。

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

ので、あなたのパンツは自動的にint型に変換され、XOR演算は、整数オペランドに非常に効率的に行われます。

オペランドの1つがlong型の場合、どちらの型もlong型に強制的に変換されます。ただし、あなたの場合は該当しません。

ボトムライン、あなたが短い結果が必要な場合は、行うための最も効率的なものは、これは、2つのshortをXORするための最も効率的な方法である

short result = (short) (operandA^operandB); 
関連する問題