byte
(8 ビット) 型を(16 ビット) 型にキャストしてshort
いますが、Java がビットをキャストするのではなく、元の var の値をキャストしているように見えます。
結果の var: に 8 ビット マスクを適用して解決しましたshort t = data & 0xFF
。
Java は var の値またはそのビットにキャストしますか?
byte
、short
および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 のみです。