- 1
- 2
- 3
- 4
- 5
- 6
- 7
n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa);
n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc);
n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0);
n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00);
n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000);
-- C code which reverses the bits in a word.
Теперь по теме: 0x5 = 0b0101; 0xa = 0b1010; 0x3 = 0b0011; 0xc = 0b1100. Пронумеруем биты 16-битного числа: рпонмлкизжедгвба.
(n >> 1) & 0x55555555 == 0b0р0о0м0к0з0е0г0б.
(n << 1) & 0xaaaaaaaa == 0bп0н0л0и0ж0д0в0а0.
После первого шага n = 0bпрнолмикжздевгаб.
Заметим, что пары смежных битов поместались менями.
Второй шаг:
(n >> 2) & 0x33333333 == 0b00пр00лм00жз00вг.
(n << 2) & 0xcccccccc == 0bно00ик00де00аб00.
После второго шага n = 0bноприклмдежзабвг.
Заметим, что у нас возникли упорядоченные цепочки длиной 4 бита.
Третий шаг:
(n >> 4) & 0x0f0f0f0f == 0b0000нопр0000дежз.
(n << 4) & 0xf0f0f0f0 == 0bиклм0000абвг0000.
После третьего шага n = 0bиклмнопрабвгдежз.
Осталось поместать менями две половинки.
Четвёртый шаг:
(n >> 8) & 0x00ff00ff = 0b00000000иклмнопр.
(n << 8) & 0xff00ff00 = 0bабвгдежз00000000.
После четвёртого шага n = 0bабвгдежзиклмнопр.
Похоже, что автор имел в виду всё-таки двойное слово, а не слово. Повторить всю цепочку действий для двойного слова предлагаю читателю в качестве домашнего задания.
Кстати, переведи на "PHP" с учётом разрядности системы. Я сегодня ночью пытался, но я анскильный и уснул, теперь у меня не все клавешы роботают (ну, ещё меньше чем до этого).
eax –— это двойное слово (DWORD), а rax –— четверное (QWORD).
После вореций «Гугл» практически перестал индексировать ГК, увы.
на 8086 была 16, 8 было на 8088.
http://govnokod.ru/25796#comment499122
Еще раз: любой IBM PC является персональным компьютером, но не все персональные компютеры имеют архитектуру IBM PC. IBM PC является подмножеством множества персональных компьютеров.
Заебал.
>> эта подветка началась с моего шутливого комента про переход с 8-ми на 16 бит.
При чем тут 80-е?
Город улыбается, улыбается.
В микрокалькуляторах, правда, 4-битное «слово» означало не число, а всего лишь одну цифру числа (там зачастую была BCD — двоично-десятичная кодировка; использовалось 10 значений из 16 возможных, остальные были зарезервированы).
Кстати, у него есть инструкции для «условных переходов». Для этого имеются выходы «перемотка ленты вперёд» и «перемотка ленты назад». Внешнее устройство, которое кормит процессор инструкциями, должно просматривать сигналы перемотки.