Почему операция сдвига вправо (>>) над байтом дает странный результат? - PullRequest
2 голосов
/ 11 апреля 2011

Есть байт [01100111], и я должен разбить его таким образом поэтому после перемещения частей этого байта в разные байты я получу:

[00000000] => 0 (in decimal)
[00000011] => 3 (in decimal)
[00000111] => 7 (in decimal)

Я пытаюсь сделать это с помощью такого кода:

byte b=(byte)0x67;
byte b1=(byte)(first>>7);
byte b2=(byte)((byte)(first<<1)>>6);        
byte b3=(byte)((byte)(first<<3)>>3);

Но я получил:

b1 is 0
b2 is -1 //but I need 3....
b3 is 7

Где я ошибся?

Спасибо

1 Ответ

8 голосов
/ 11 апреля 2011

Ваши результаты будут автоматически расширенный знак .

Попробуйте маскировать и сдвигать вместо двойного сдвига, то есть:

byte b1=(byte)(first>>7) & 0x01;
byte b2=(byte)(first>>5) & 0x03;
byte b3=(byte)(first>>0) & 0x1F;
...