Задать вопрос
@LoranDeMarcus

Как поменять местами биты в байте?

Доброго времени суток, прошу помощи.
Необходимо в числе 120 поменять местами биты (0 и 1, 2 и 3, 4 и 7, 5 и 6).
Вообще не представляю как это можно сделать.
  • Вопрос задан
  • 3714 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@awesomer
  1. маска по четным, исходное число AND 01010101
  2. сдвиг, SHL (или наборот, SHR, нужно подумать)
  3. сохраняем промежуточный результат
  4. маска по нечетным, исходное число AND 10101010
  5. сдвиг в противоположенную сторону, SHR (или наоборот SHL, нужно подумать)
  6. получаем второй промежуточный результат
  7. объединение 2-х промежуточных результатов, ADD или OR

маска разумеется в двоичной системе счисления приведена.

придумал за 2 секунды, могу ошибаться.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Можно, например, создать новое число, в котором на нужных местах будут стоять нужные биты старого числа.
В чём затруднение-то, в алгоритме или в реализации?
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
Получить значение бита 4:
mov eax, 1
shl eax, 4
mov ecx, 120
and ecx, eax
shr ecx, 4


Установить бит 4
mov eax, 1
shl eax, 4
mov ecx, 120
or ecx, eax


Сбросить бит 4
mov eax, 1
shl eax, 4
not eax
mov ecx, 120
and ecx, eax


Естественное, если у вас всё заранее известно вы можете маски захардкодить. Это для решения задачи в лоб. А так читайте про арифметические сдвиги, когда можно управлять какой бит выбыл/вставится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы