![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Diget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
Помогите с такой вот задачкой: Определить, сколько раз в числе x встречаются набор из двоичных бит 1101.
Тут надо как-то наложить маску, но вот как это сделать я незнаю. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
недумая яб сказал, например так:
UPD. попоравил: не было присвоения после сдвига. Это сообщение отредактировал(а) jonie - 4.6.2008, 01:09 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Diget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
А можно это как-нибудь в Си перевести, а то я Си ++ не понимаю совсем
|
|||
|
||||
| Diget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
я не понимаю совсем эти побитовые операции:( что с ними делать и как это делать...
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот.. адаптируй под свои нужды ))
Добавлено через 1 минуту и 18 секунд опоздал опять )) Добавлено через 2 минуты и 40 секунд n>>=1; |
||||
|
|||||
| Diget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
Спасибо большое. Сейчас гляну как она работает.
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
mes угу. я недоглядел. там дейтсвительно нету у меня присвоения.
однако гонять до нуля не вижу смысла. т.к. если число будет меньше 0xD то оно никогда не будет совпадать по маске с 0xD.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
jonie, смысл есть, так как число может быть не обязательно 0xD. Кроме того, условие в цикле неверно: проверяется как будто бы сдвиг был на байт (sizeof выдаёт не в битах), а сдвиг проводится на бит. Да и условие при подсчёте неверное: маска должна содержать все проверяемые разряды, иначе, например, 0xF по твоему условию тоже пройдёт. Исправив всё это, получишь решение, которое написал mes. Это сообщение отредактировал(а) Ln78 - 4.6.2008, 07:22 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
jonie, имел ввиду меньше искомого числа - тут он прав но мне кажется ьту оптимизацию можно опереложить на плечи автора топика )) точно Ln78, внимательный! а я в условие не приглядывался - увидел что есть & и == значит правильно )) Это сообщение отредактировал(а) mes - 4.6.2008, 11:11 |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
mes, так и я имел в виду именно искомое число. В условии стоит число разрядов, меньше которых смотреть не нужно. В том смысле, если бы искомая последовательность была 0001=0x1, то и условие тоже надо было бы менять. Без особой необходимости столь агрессивную оптимизацию я бы применять не стал. Это вообще нужно смотреть индивидуально, а то, может оказаться, что на сравнении не с нулём потеряем больше. Р.S. Хотя здесь не так: это неоднозначность в условии, можно ли дополнять нулями недостающее или нет. Если нельзя - то надо именно длину последовательности. Это сообщение отредактировал(а) Ln78 - 4.6.2008, 12:28 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
согласен с тем , что если последовательность начинается с нуля, то надо менять условие поэтому написано: )) |
|||
|
||||
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Это не работает. Например, если n=1111111...1b, то n&0xD всегда будет равно 0xD. Чтобы точно сказать помоему надо ещё (n&~(0xD))==(~(0xD)). |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
уже Ln78, это уточнял : Добавлено через 1 минуту и 5 секунд Rififi,успел раньше )) |
|||
|
||||
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |