2015-04-16 4 views
0

Я пытаюсь понять команду «someByte < < 2» в java. Для чего это? В iscsi docmentation есть страница режима кэширования, в которой говорится о ПРИОРИТЕТЕ ЗАПРЕЩЕНИЯ ЗАПРЕЩАЕТСЯ ЧРЕЗВЫЧАЙНЫМ ПРИНЦИПОМ И ПРИОРИТЕТЕ НАПРЯЖЕНИЯ. enter image description hereкоманда << с байтами в java

у источника есть этот код для этих сообщений:

// serialize byte 3 
b = (byte)((demandReadRetentionPriority << 4) | writeRetentionPriority); 
buffer.put(b); 

Почему они используют команду "< < 4" с demandReadRetentionPriority, а не с writeRetentionPriority? И что делает < < означает в этом случае?

Спасибо.

+2

http://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_Java –

+1

Смотрите также: http://stackoverflow.com/questions/141525/absolute-beginners-guide-to-bit-shifting –

ответ

2

Из документации видно, что demandReadRetentionPriority находится в верхних 4 битах (бит 7,6,5 и 4) байта и writeRetentionPriority хранится в нижних 4 битах (3,2,1 и 0) байта.

Код, который вы указали, просто сдвигает значение, хранящееся в переменной demandReadRetentionPriority, в верхние 4 бита. << - операция сдвига бит.

Например, если значение demandReadRetentionPriority было 1, то он будет сдвинутые 4 бита и байт будет иметь двоичное представление следующим образом:

00010000

И для того, чтобы один из нижних битов из b, который должен быть установлен в 1, соответствующий бит в writeRetentionPolicy будет должен также быть установлен в 1, поскольку нижние 4 бита demandReadRetentionPolicy будут равны 0 после сдвига бит.

2

<< является оператором «Подписанный сдвиг влево», оператором смещения бит.

Пример:

Вы сохранили номер 279, который был бы в десятичной системе 100010111. Когда вы сдвигаете 4 шага влево, вы получаете 1000101110000 (2224), потому что он «переместит» десятичное число влево и заполнит пробелы нулями.

100010111 << 4 
=> 1000101110000 
      ++++ 

Подвижные операции очень быстро, потому что они, как правило, реализуются на аппаратном уровне в качестве одной машинной инструкции.

| также является оператором на уровне бит: побитовое включение ИЛИ.

Summary of operators in java