|
|
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, объясните как можно с помощью операций ">>" и "<<" выполнить умножение или деление эквивалентное умножению или делению на число не кратное 2, т. к. как вычитала если х << 1 сдвигает значение х влево на две позиции , заполняя освобождающиеся биты нулями, что эквивалентно умножению х на 2! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 00:55 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
LEEDAПожалуйста, объясните как можно с помощью операций ">>" и "<<" выполнить умножение или деление эквивалентное умножению или делению на число не кратное 2, т. к. как вычитала если х << 1 сдвигает значение х влево на две позиции , заполняя освобождающиеся биты нулями, что эквивалентно умножению х на 2! раскладываешь множитель по битам и складываешь соответствующие единичным битам сдвиги: y = x << 2 + x получаешь y=x*5 (т.к. 5.dec=101.bin) а оно тебе зачем такое извращение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 03:27 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
Сдвиг "влево" на один двоичный разряд с заполнением младшего разряда нулем - это умножение на два. Сдвиг "вправо" на один двоичный разряд с заполнением старшего знака знаковым битом - деление на два. Поскольку младший знак всегда нулем заполняют, то сдвиг влево всегда один. А старший знак можно заполнять либо нулем, либо знаковым битом. Поэтому сдвиги вправо бывают арифметические и логические. Первый - это деление, второй - просто сдвиг. Бывают еще циклические сдвиги , в которых в освобождаемый разряд попадает бит, спадающий с разрядной сетки с другой стороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 11:38 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
LEEDAПожалуйста, объясните как можно с помощью операций ">>" и "<<" выполнить умножение или деление эквивалентное умножению или делению на число не кратное 2, т. к. как вычитала если х << 1 сдвигает значение х влево на две позиции , заполняя освобождающиеся биты нулями, что эквивалентно умножению х на 2! 1) запись типа x<<1 НЕ сдвигает значение x на ДВЕ позиции. А всего лишь на ОДНУ позицию. См. учебник по Сям. 2) Сдвиг значения(в лево) в ЛЮБОЙ СС приводит к УМНОЖЕНИЮ данного значения на ОСНОВАНИЕ данной СС. Это так сказать эээээээ фундамент... Соответственно сдвиг в право - деление... Для примера мона взглянуть на полёт Вашей мысли при умножении одного рубля на десять или сто (про рубли - чтоб ышо наглядней было :) ). Вряд ли Вы это делаете "честно" в столбик ! 3) Если требуеться реализовать операции с НЕ КРАТНЫМИ двум, то лучше обратиться к опыту ранее накопленному. Катят ассемблерные примеры целочисленной математики. Пример с весами разрядов уже привели выше. с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 12:38 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
Добавлю. С отрицательными целыми числами есть свои тонкости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 21:32 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
Вообще-то, умножение в двоичной системе делается , практически так же как и в десятичной, столбиком. Сдвиг и сложение. Тот факт, что в разряде могут быть только 0 и 1 упрощает процесс. Вы либо складываете, либо нет. Посмотрите, как вы умножаете десятичные числа и попробуйте воспроизвести логику для для двоичных. Естественно, знаковые операции будут несколько сложнее. Деление - это отдельная тема, гораздо сложнее, и я уже не помню, как оно делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 23:10 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
maytonДобавлю. С отрицательными целыми числами есть свои тонкости. Нет никаких тонкостей. Есть разные сдвиги, арифметический и логический (и циклический еще). Арифметический сдвиг - это умножение и деление , а остальные - просто манипуляция битами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 23:37 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
MasterZiv Нет никаких тонкостей. Есть разные сдвиги, арифметический и логический (и циклический еще). Арифметический сдвиг - это умножение и деление , а остальные - просто манипуляция битами. Этим я хотел почеркнуть, что фрагмент кода, предложеный sraider-om не является эквивалентом математического умножения на 5 . Для отрицательных значений X этот исходник дает непредсказуемые результаты. В свое время я занимался оптимизацией сорсов под Ассемблер и знаю много хитростей и трюков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 23:59 |
|
||
|
Операции умножения и деления выполняющиеся с помощью операций сдвига
|
|||
|---|---|---|---|
|
#18+
Ты маладэц, mayton! Прадалжай знать и дальши !! С новым годом !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2006, 00:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33470870&tid=2032180]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 341ms |

| 0 / 0 |
