![]() |
|
Модераторы: bsa |
![]()
|
|
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Здравствуйте уважаемые читатели форума! СОвсем не представляю как сделать простейшую програмку на С++. Нужно вычислить номер позиции первого значащего символа. Всё это сделать с двоичным представлением числового значения при использовании типа Long int. Используя только самые простые команды (одно из условий задания) : |;&;<<;>>. Кто чем может помогите пожалуйста. Заранее благодарен.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
первого значещего бита? long int value; int pos=0; while ((value & (1<<i)) ==0) ++pos; И чего это я написал тут? Исправлено:
Это сообщение отредактировал(а) mes - 5.10.2008, 12:21 |
|||
|
||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
mes, у тя ерунда какаято написана
классический - вычисляется в худшем случае за время пропорциональное разрядности:
оригинальный
обе функции возвращают номер (0-based) старшего бита либо -1 если передан 0 Это сообщение отредактировал(а) J0ker - 5.10.2008, 06:31 |
||||
|
|||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
J0ker, с каких пор нумерация битов осуществляется слева направо?
Добавлено через 11 минут и 39 секунд Кстати, в современных x86-64 процессорах есть специальная команда для определения номера позиции в операнде самого младшего единичного бита -- BSF. Поэтому если забить на переносимость можно заюзать её, будет очень быстро:
Это для x86 под компилятор msvc++. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
А вот переносимый и тоже быстрый вариант:
Деление можно заменить умножением. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
а почему вы у меня это спрашиваете????? если вы так считаете - это ваши проблемы
если я прально понял - первый значащий - это старший |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Логично рассуждать так:
Первый == младший Последний == старший Нумерация справа налево, соответственно первый значащий == первый единичный справа. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
если убрать слово "значащий" - то может быть но пишем мы и читаем - слева на право (ну если вы конечно не в Израиле обитаете поэтому ПЕРВЫЙ значащий - первый слева обычно Добавлено через 5 минут и 42 секунды впринципе недопонимание такого парадокса очевидно в английском first significant означает не просто первый, а наиболее, самый Это сообщение отредактировал(а) J0ker - 5.10.2008, 07:36 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Ага, значит в Израиле первый значащий это первый справа, а в Японии первый сверху... Надо подождать автора и уточнить, что именно он хотел. Я ответил то, что считал правильным исходя из своих собственных догадок, вполне логичных. Автору следует разобраться в терминологии и задавать вопросы более точно. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
вы хотите побеседовать на тему "право ли большинство?" Добавлено через 1 минуту и 58 секунд большинство задачек по программированию - переводные, и обычно с английского в английском first significant и most significant - эквивалентны |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
а еще на ассемблере лабаете... у тебя LE или BE? как бы first и most несколько разные слова, даже в прямом переводе Это сообщение отредактировал(а) MAKCim - 5.10.2008, 09:43 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Господа, нужно вычислить номер позиции первого значащего бита, тоесть единички. Задача усложняется тем, что никакого умножения\деления, использования цикла и прочее делать нельзя. Можно только логическое и\или и сдвиги влево и вправо, при этом использовать Long int
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
первый справа или слева? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Первый слева, первая единичка
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |