1

byte(8 ビット) 型を(16 ビット) 型にキャストしてshortいますが、Java がビットをキャストするのではなく、元の var の値をキャストしているように見えます。

結果の var: に 8 ビット マスクを適用して解決しましたshort t = data & 0xFF

Java は var の値またはそのビットにキャストしますか?

4

3 に答える 3

8

byteshortおよびintすべて符号付きです (long、float、および double と同様)。これは、バイトが -128 から 127 の場合、short、int、long、float、または double で -128 から 127 のままであることを意味します。

範囲 -128 から 127 を 0 から 255 にマップする場合はint、Java での作業がより簡単な を使用することをお勧めします。

 byte b = -128;
 int i = b & 0xFF; // i == 128

32ビットまたは64ビットのレジスタがあるため、shortローカル変数を使用しても、それらがたくさん(つまり何百万も)ない限り、思ったほど役に立ちません。ところで、バイトコードでは2つのサイズしか許可されていませんローカル変数、1 つのスロット (boolean、byte、short、float、int、reference) および 2 つのスロット (long および double) 注: 参照は 64 ビット JVM でも 1 つの「スロット」を使用します。

unsigned 型は char のみです。

于 2013-04-16T07:19:27.497 に答える