2017-05-21 12 views

答えて

3

シフトを含むビット単位の演算を使用できます。

初の逆アセンブル:

ここ
int original32 = 1000; 
int high16 = original32 >>> 16; 
int low16 = original32 & 0xFFFF; 
System.out.println(high16); 
System.out.println(low16); 

、下位16ビットを得るために、私達はちょうどゼロアウト上位16ビットに値をマスク。より高い16ビットを得るために、我々はそれらを右にシフトする。下位ビットを(実際には、OR)

int rebuilt32 = (high16 << 16) | (low16 & 0xFFFF); 
System.out.println(rebuilt32); 

は、ここでは、バック左上位16ビットをシフトしてから '追加':

を再構築します。

+1

「short」は署名されているため、15番目のビットが1の場合は符号拡張されます。 –

+1

@PeterLawrey:このコードには 'short'はありません。したがって、' low16'に対して '&0xFFFF'を2回行う必要はありません。代わりに[この回答](https://stackoverflow.com/a/44098811/2711488)を修正したはずです... – Holger

1

ビットシフトとキャストを短くすることでそうすることができます。

int i = 1000100010; 
short lower = (short) i; 
short upper = (short) (i >> 16); 
int complete = lower | (upper << 16); 
関連する問題