2017-02-02 4 views
0

私はバイトを2(int)と-1(バイト)と言うことができますが、結果として-3が得られますが、私には正のintを与える操作が必要です。これは、2の補数表現と型宣言によるものです。私は、Javaで符号なしバイトを使用できる方法があるかどうかを知りたい。Javaに符号なしバイトの規定はありますか?

int x = 2; 
byte y = -1; 
System.out.println(x^y); 

出力

-3 

私は2つの優れた同様の質問herehereを発見しました。しかし、私は、後で2の補数表現なしでバイトに変換できるintを返すためのいくつかのメソッドまたはビット演算が必要です。

+0

"y"の符号拡張はそれほど重要ではありません。結果の下位8ビットは依然としてあなたが望むものなので、もしあなたがバイトに変換するなら、それは正しいでしょう。 – harold

答えて

0

char(およびboolean)を除くすべてのタイプが署名されています。

符号なし換算値を取得するには、あなたがより広いタイプを使用してマスクを使用することができます。Java 8ので

public static int unsigned(byte value) { 
    return value & 0xff; 
} 

public static int unsigned(short value) { 
    return value & 0xffff; 
} 

public static long unsigned(int value) { 
    return value & 0xffffffffl; 
} 

を、標準API(例えばByte.toUnsignedInt(…))そのための方法を提供します。

0

Javaの符号なしタイプはcharで、16ビットの符号なし整数です。

あなたはそれを利用することができます。

必要に応じて、& 0xffを使用してより重要なバイトをマスクしてください。

関連する問題