![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
Вообщем задача - надо сложить или умножить числа используя только битовые операции над ними, в случаи с умножением будет проще, если написать функцию сложения
![]() буду очень благодарен если кто подкинет информации по этому поводу! |
|||
|
||||
morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: 3 Всего: 8 |
я такое когда то на ассемблере делал, причем числа вылазили за регистры)))
|
|||
|
||||
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
ммм неушто ни укого нет идей?)
|
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
использование циклов и условий допускается?
Это сообщение отредактировал(а) Albinos_x - 9.10.2008, 22:49 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
Albinos_x да
Это сообщение отредактировал(а) ne0n - 9.10.2008, 22:59 |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Добавлено через 8 минут и 50 секунд сейчас над умножением подумаю -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
Albinos_x, Большое спасибо за сложение....я уже начал писать свой алго-некое подобие сложение столбиком....но втой вариант просто супер) даже со знаковыми числами корректно работает^_^. Тока теперь надо поянть ка кэто работает)
|
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
не... над умножением думать не надо.. запускать в цикле сложение и всё...)))
Добавлено через 7 минут и 3 секунды ne0n, всё просто, операция xor производит складывание побитовое, но не может перенести разряды при попадании на 1+1, для выделения таких разрядов использую and, но т.к. эти разряды перейдут в старшие, то делаю сдвиг на один и опять складываю это число с результатом, и так пока в старщие разряды не будет переходить ни одного разряда ...) -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
ога, я про это уже писал....что если научиться складывать - то умножать будет не проблема) Добавлено через 12 минут и 45 секунд Albinos_x, с меня еще +, за элегантное решение) я кстати сначало тоже начал капать в эту сторону....ну чтото не сообразил...и решил в лоб столбиком все посчитать, но твое решение ![]() ![]() |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
ne0n, просто я сначала подумал, для умножения тоже чтонибудь хитроумное
![]() ![]() ![]() Это сообщение отредактировал(а) Albinos_x - 10.10.2008, 00:17 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
абсолютно напрасно. сдвиг - это что? верно: деление или умножение на два. двойной сдвиг влево - умножение на 4. тройной - на 8. если свдинуть единожды и сложить(сложение уже описали) с результатом двойного сдвига, то выйдет 2x + 4x = 6x: умножение на 6. а можно так: 2 * ( 2 * х + х) - то есть сдвинуть влево, сложить с исходным числом и сдвинуть влево биты результата. Добавлено через 27 секунд в смысле, напрасно думал, что "так просто не выйдет" ![]() |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
это будет слишком громоздко, и далеко не эффективней складывания в цикле, т.к. появится куча условий и временных переменных, т.к. придётся сначала искать ближайшее кратное нашим разрядам, после сдвига вычитать уже сделанное, потом опять искать кратное, потом складывать...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
это будет выглядить где-то так:
функция будет эффективней складывания в цикле приблизительно при b>2n+k, где n-число разрядов в числе b, k - число единичных разрядов в числе b. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |