Введение в операторы битового сдвига:
Во-первых, у нас есть оператор сдвига влево x << n
. Это сдвинет все биты в x
влево на n
бит, заполняя новые биты нулями:
1111 1111
<< 3: 1111 1000
Затем у нас есть знаковый оператор сдвига вправо, x >> n
. Это сдвигает все биты в x
вправо на n, копируя знаковый бит в новые биты:
1111 1111
>> 3: 1111 1111
1000 0000
>> 3: 1111 0000
0111 1111
>> 3: 0000 1111
Наконец, у нас есть оператор сдвига вправо с заполнением нулями, x >>> n
. Это сдвигает все биты в x
вправо на n
бит, заполняя новые биты нулями:
1111 1111
>>> 3: 0001 1111
Вы также можете найти полезным оператор побитового ИЛИ x | y
. Это сравнивает биты в каждой позиции в x
и y
, устанавливая бит нового числа включенным, если он был включен в x
или y
, в противном случае выключен:
1010 0101
| 1010 1010
---------
1010 1111
Вам могут понадобиться только предыдущие операторы для решения данной проблемы, но для полноты, вот два последних:
Поразрядный оператор и x & y
устанавливает биты на выходе в единицу тогда и только тогда, когда бит включен как в x
, так и в y
:
1010 0101
& 1010 1010
---------
1010 0000
Оператор побитового xor x ^ y
устанавливает выходные биты в единицу, если бит включен в одном или другом числе, но не в обоих:
1010 0101
^ 1010 1010
---------
0000 1111
Теперь применим их к текущей ситуации:
Вам нужно будет использовать операторы битового сдвига для добавления битов и управления ими. Начните устанавливать биты с правой стороны в соответствии с их строковыми представлениями и сдвиньте их. Продолжайте, пока не дойдете до конца байта, а затем перейдите к следующему байту. Допустим, мы хотим создать байтовое представление «1100 1010»:
Our byte Target
--------- --------
0000 0000
1100 1010
0000 0001 ^
1100 1010
0000 0011 ^
1100 1010
0000 0110 ^
1100 1010
0000 1100 ^
1100 1010
0001 1001 ^
1100 1010
0011 0010 ^
1100 1010
0110 0101 ^
1100 1010
1100 1010 ^
Я, конечно же, предоставлю вам возможность применить это к своей работе.
person
Kevin
schedule
26.11.2011
String
длиной 18 символов (010100111111011000) для представления слова длиной 7 символов (программа). Вы уверены, что имеете в виду то, что спрашиваете? Обычно эти биты устанавливаются в X байтах (в данном случае 3). - person Brian Roach   schedule 26.11.2011>>
,>>>
,<<
. - person Kevin   schedule 26.11.2011String
s, о которых вы говорите в своем вопросе, что является источником путаницы. Если у вас естьString
, как вы говорите, у вас нет битов. У вас есть набор символов0
и1
(в частности, у вас есть 16-битный символ Unicode для каждого, что заставляет вашу память использовать 36 байтов до накладных расходов объектаString
) - чтобы было ясно, если у вас естьString
, у вас есть текстовый представление набора битов, выраженное с помощью символов 0 и 1. - person Brian Roach   schedule 26.11.2011String
? - person Brian Roach   schedule 26.11.2011