Введение в операторы сдвига битов:
Во-первых, у нас есть оператор сдвига влево, 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
Вы должнытолько предыдущие операторы нужны только для рассматриваемой задачи, но для полноты изложения вот последние два:
Оператор побитового и *, 1030 * устанавливает биты в выводе в один, если и толькоесли бит включен как в 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 ^
Я, конечно, оставлю вам право применять это к вашей работе.