@Denys1203

Умножение и деление используя сдвиги, как это работает?

Сделал вот такую мини-программку, но все равно не понимаю, как это работает, может кто-то объяснить? (Возможно в ней нет смысла, но кто может разобрать/закоментить строки?)
Проверил в дос, сначала заносится число 4, потом из него получается 28, и в итоге 14, почему?
mov bl, 10
  mov al, 4
  mul bl
  shr al, 1
  • Вопрос задан
  • 124 просмотра
Решения вопроса 2
ematveev
@ematveev
PHP разработчик / руководитель / писатель
не надо всё смешивать в одну кучу mul и shr. рассмотрим сдвиги:
представим например число 1 в двоичном исчислении 8 бит: 00000001.
что будет если сдвинуть биты влево? - что в десятичной системе будет 2.
ещё сдвинем влево - получится 00000100 - в десятичной это 4.
вот получается и умножение при сдвиге влево. а при сдвиге вправо - деление
Ответ написан
includedlibrary
@includedlibrary
4 * 10 = 40. Переводим в шестнадцатиричную систему, получаем 0x28.
40 / 2 = 20. Переводим в шестнадцатиричную систему, получаем 0x14.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы