- 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.
neTyx_npoTKHyTbIu 03.09.2019 02:32 # 0
guest8 03.09.2019 02:59 # −999
guest8 03.09.2019 04:12 # −999
Pretty_Young_Thing 04.09.2019 01:18 # 0
CBO6OgHblu_nemyx 03.09.2019 08:04 # +1
Теперь по теме: 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абвгдежзиклмнопр.
Похоже, что автор имел в виду всё-таки двойное слово, а не слово. Повторить всю цепочку действий для двойного слова предлагаю читателю в качестве домашнего задания.
Rooster 03.09.2019 08:45 # 0
Кстати, переведи на "PHP" с учётом разрядности системы. Я сегодня ночью пытался, но я анскильный и уснул, теперь у меня не все клавешы роботают (ну, ещё меньше чем до этого).
CBO6OgHblu_nemyx 03.09.2019 11:43 # 0
guest8 04.09.2019 00:41 # −999
guest8 04.09.2019 00:58 # −999
CBO6OgHblu_nemyx 04.09.2019 01:03 # 0
eax –— это двойное слово (DWORD), а rax –— четверное (QWORD).
guest8 04.09.2019 01:06 # −999
Pretty_Young_Thing 04.09.2019 01:17 # 0
guest8 04.09.2019 01:18 # −999
guest8 04.09.2019 01:31 # −999
guest8 04.09.2019 01:33 # −999
guest8 04.09.2019 01:33 # −999
guest8 04.09.2019 01:34 # −999
guest8 04.09.2019 01:40 # −999
guest8 04.09.2019 01:42 # −999
Pretty_Young_Thing 04.09.2019 01:43 # 0
guest8 04.09.2019 01:46 # −999
guest8 04.09.2019 01:53 # −999
guest8 04.09.2019 01:55 # −999
gost 04.09.2019 01:55 # 0
guest8 04.09.2019 01:56 # −999
guest8 04.09.2019 02:12 # −999
gost 04.09.2019 02:41 # 0
После вореций «Гугл» практически перестал индексировать ГК, увы.
CBO6OgHblu_nemyx 04.09.2019 02:44 # 0
guest8 04.09.2019 01:56 # −999
Pretty_Young_Thing 04.09.2019 01:39 # 0
на 8086 была 16, 8 было на 8088.
guest8 04.09.2019 01:42 # −999
Pretty_Young_Thing 04.09.2019 01:47 # 0
guest8 04.09.2019 01:56 # −999
Pretty_Young_Thing 04.09.2019 02:06 # 0
guest8 04.09.2019 02:08 # −999
Pretty_Young_Thing 04.09.2019 02:12 # +1
guest8 04.09.2019 02:19 # −999
Pretty_Young_Thing 04.09.2019 02:24 # 0
http://govnokod.ru/25796#comment499122
guest8 04.09.2019 02:26 # −999
Pretty_Young_Thing 04.09.2019 02:36 # +1
Еще раз: любой IBM PC является персональным компьютером, но не все персональные компютеры имеют архитектуру IBM PC. IBM PC является подмножеством множества персональных компьютеров.
Заебал.
guest8 04.09.2019 02:40 # −999
Pretty_Young_Thing 04.09.2019 02:46 # 0
>> эта подветка началась с моего шутливого комента про переход с 8-ми на 16 бит.
При чем тут 80-е?
guest8 04.09.2019 02:51 # −999
guest8 04.09.2019 07:43 # −999
guest8 04.09.2019 08:54 # −999
CBO6OgHblu_nemyx 04.09.2019 12:39 # 0
Город улыбается, улыбается.
CBO6OgHblu_nemyx 04.09.2019 01:35 # 0
В микрокалькуляторах, правда, 4-битное «слово» означало не число, а всего лишь одну цифру числа (там зачастую была BCD — двоично-десятичная кодировка; использовалось 10 значений из 16 возможных, остальные были зарезервированы).
guest8 04.09.2019 01:38 # −999
guest8 04.09.2019 01:43 # −999
guest8 04.09.2019 01:44 # −999
guest8 04.09.2019 02:17 # −999
guest8 04.09.2019 02:19 # −999
Pretty_Young_Thing 04.09.2019 01:49 # +1
guest8 04.09.2019 01:57 # −999
CBO6OgHblu_nemyx 04.09.2019 02:02 # 0
guest8 04.09.2019 02:04 # −999
CBO6OgHblu_nemyx 04.09.2019 02:05 # 0
guest8 04.09.2019 02:09 # −999
CBO6OgHblu_nemyx 04.09.2019 02:13 # 0
Кстати, у него есть инструкции для «условных переходов». Для этого имеются выходы «перемотка ленты вперёд» и «перемотка ленты назад». Внешнее устройство, которое кормит процессор инструкциями, должно просматривать сигналы перемотки.
Pretty_Young_Thing 04.09.2019 02:29 # +1
CBO6OgHblu_nemyx 04.09.2019 02:00 # 0
guest8 04.09.2019 01:06 # −999
guest8 04.09.2019 01:13 # −999
guest8 04.09.2019 01:16 # −999
guest8 04.09.2019 01:52 # −999
guest8 04.09.2019 02:05 # −999
Pretty_Young_Thing 04.09.2019 02:11 # +1
guest8 04.09.2019 02:14 # −999
CBO6OgHblu_nemyx 04.09.2019 02:18 # 0
guest8 04.09.2019 03:08 # −999
guest8 04.09.2019 02:19 # −999
Pretty_Young_Thing 04.09.2019 02:26 # 0
guest8 04.09.2019 02:27 # −999
Pretty_Young_Thing 04.09.2019 02:31 # 0
guest8 04.09.2019 00:41 # −999
guest8 04.09.2019 00:42 # −999
Elvenfighter 03.09.2019 23:34 # 0