2015-06-18 4 views
0

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

  1. который является LSB и который является MSB,
  2. , что этот оператор |

Учитывая выражение:

3 << 0 | 
7 << 3 | 
1 << 6 | 
0 << 7 | 
1 << 7 | 
0 << 8 | 
0 << 10 | 
0 << 11 | 
0 << 12 | 
0 << 13 | 
0 << 14 

, а остальные 15 бит - 0.

Как сдвинуть данные, считая начальные биты в регистре 0?

011 111 1 0 1 0 0 0 0 0 0 X.......X 

или

x .....X 0 0 0 0 0 0 1 0 1 111 011 
+0

Прочтите учебник о битовых операциях. Вероятно, есть и другие недостающие сведения. Бесполезно спрашивать об одной проблеме, так как вряд ли вы получите последовательную картину об этом поле. Если вы используете C, прочитайте книгу. Лучшие из них также относятся к битовым операциям относительно C. Для '' '' и '<<', обратите внимание, что они не одинаковы для каждого языка. Особенно операторы смены могут вести себя не так, как вы на самом деле ожидаете - особенно в правильной смене. – Olaf

ответ

2

Младший бит (наименее значимый бит) является бит, значение которого равно 1 (2^0) и старший бит равен бит, значение которого представляет собой 2^(N-1), где n - количество бит в регистре. В общем случае, когда выписано в двоичном формате, MSB - самый левый бит, а младший бит - самый правый бит. Чаще всего LSB отображается как бит 0 в документации по аппаратным средствам, хотя я знаю одну компанию, которая меняет нумерацию бит, чтобы номер MSB был пронумерован.

<< - это оператор сдвига С, смещающий бит от LSB и к MSB. Поэтому 7<<3 представляет 111000 в двоичном формате.

| является оператором бит-бит ИЛИ. Это используется для объединения значений, когда результирующие биты являются единичными, если один из соответствующих входных битов один.

Глядя на исходное значение 3 << 0 | 7 << 3 | 1 << 6 | 0 << 7 | 1 << 7 | 0 << 8 | 0 << 10 | 0 << 11| 0 << 12 | 0 << 13 | 0 << 14

0000 0000 0000 00113<<0 из

0000 0000 0011 1000 из 7<<3

0000 0000 0100 0000 из 1<<6

0000 0000 0000 0000 из 0<<7

и т. Д.

Этот тип конструкции обычно используется для описания значения, поступающего в регистр с отдельными полями регистра.

+0

"..., который меняет порядок нумерации бит, чтобы MSB был пронумерован 0." Я видел это только в 9-х годах в документации PPC601. Очень смущает. – Olaf

+0

@LeeDanielCrocker - спасибо за исправление. – DoxyLover

Смежные вопросы