5

Java で持っている値に対してビット単位または値を実行しようとしてbyteいます。

たとえば、私は実行しています:

byte b = (byte)0b11111111;
int result = 0 | b;

これに対する私の期待される結果は0b00000000 00000000 00000000 11111111、または255です。しかし、私は-1、またはを受け取ってい0b11111111 11111111 11111111 11111111ます。

byte操作を実行する前に Java が myをintvia 記号拡張に変換すると仮定しています0b11111111

4

1 に答える 1

8

byteビット マスクの使用は、をに変換するときに符号拡張を無効にする標準的なソリューションintです。この Java の醜さを受け入れるしかありません。

int result = 0 | (b & 0xFF);
于 2015-01-28T22:16:29.930 に答える