![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
слушаю и повинуюсь. ваши слова для меня - истина в последней инстанции. ну почему же, хорошие книжки. например эта: "Алгоритмические трюки для программистов". это ж так просто, возьмём к примеру функцию подсчета единичных битов из этой книги: (стр.78)
тру хакеры должны писать только так, я вас понял. ![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
zim22, ниче что получить младший разряд числа, и посчитать число ненулевых разрядов в числе - это разные задачи?
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
кстати вариант %2 тоже не очень наглядный, гораздо лучше, имхо, завести функцию типа bool isOdd() ![]() P.S. (в частности для GoldFinch) слово "наглядно" в моем употреблении значит, не чтоб было понятно другим программистам (для них можно и комментарий поставить если требуется), а то что код легко подается модификации и сопровождению. ![]() P.S.S. естественно замечание насчет наглядности не относится к "100-строчным" программам. ![]() Это сообщение отредактировал(а) mes - 10.7.2009, 15:27 |
|||
|
||||
DedMazai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Где: Лобня Репутация: нет Всего: нет |
Блин, ### вы тут развели
![]() Вопрос. Почему в
у меня всегда насчитывает на 3 символа больше, чем у меня есть в файле? Это сообщение отредактировал(а) DedMazai - 10.7.2009, 23:07 |
|||
|
||||
hsilgos |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
"Непосвященных" в проект не берем.
А что питоновцу делать в коде на С++ ? О_о
То же самое - по логике. Но не каждый оптимизатор оптимизирует это до "наложения маски".
Это серъезная оптимизация, может применяться в особо чувствительных к производительности местах. К тому же её можно оформить как inline функцию и использовать в любом месте. И "тру хакеры" тут нипричем. |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Этой фразой я хотел подчеркнуть что не каждому программисту нужно знание двоичной системы, а так как Cpp позволяет программить как и на Си-уровне, так и на более высоком уровне, то есть очень большой ряд Cpp-программистов, сродных по целям задач к питоновцам, т.е тем кому низкоуровневые знания нужны лишь как общая теория, и не находят применения на практике. ![]() Добавлено через 3 минуты и 30 секунд ага, и уже в ней спокойно, если вдруг компилятор не справится ( ![]() Добавлено через 5 минут и 3 секунды
И что это за символы ? приведите пример что в файле, и что считывается. |
|||
|
||||
DedMazai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Где: Лобня Репутация: нет Всего: нет |
например "otvet"
он выдаёт, что в файле не 5 символов, а 8... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Хотелось бы добавить, что именно операция &1 в принципе сама по себе не очень сложная и действительно трудно поверить, что программисту она может представлять трудность,
однако такой подход это шаг в сторону низко-уровнего программирования, и хотя этот шаг безболезненный, но как говорится "где шаг, там и два" - то легко переусердствовать на мнимой оптимизации, затруднив этим его поддержку. P.S. для ассемблерщиков использование &1 в крови, и ot %2 их естественно подташнивает поначалу, пока не поймут, что оптимизатор справится не хуже. (говорю на собственном опыте хотя и не ассемблерщик - привычка пришла из прошлой жизни ![]() (ну а если опция оптимизации не включена, значит проект и не нуждается в оптимизации ) Вообщем вот такое имхо. Добавлено @ 23:58 перевод строки уже два символа ("\r\n") и вероятно есть пробел еще. Для проверки выведите два раза считанную строку, все что будет между ними и есть Ваши символы. Это сообщение отредактировал(а) mes - 11.7.2009, 00:01 |
|||
|
||||
hsilgos |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
Ну, с этим я согласен. Низкоуровневую реализацию нужно оборачивать. Да и вообще, я сторонник того, чтобы на компилятор возлагать "рутинную" работу. Но и явную пессимизацию я не делаю. ![]() Добавлено через 1 минуту и 36 секунд DedMazai, Случайно кодировка в файле не utf-8 ? |
|||
|
||||
DedMazai |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Где: Лобня Репутация: нет Всего: нет |
Нет, не utf-8
Не совсем разобрался, что мне сделать надо ![]()
Возможно ли записать чтение этой строки так? При этом всёравно на 1 символ больше выводит.. |
||||||
|
|||||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
операция И - это не низкоуровневая реализация, а обычная математика =\
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не обычная, а двоичная . Я считаю, что если операции проводятся над двоичными или шестандцатиричными числами, то вполне уместно использовать двоичные операции, так как они накладываются без изменения логики. А вот для десятиричной системы лучше использовать десятиричные операции. Как я уже говорил выше операция &1 "случайно"по логике подходит для 10ричной сс. Но если чуть развернуть задание, например надо вначале вывести все четные числа, потом кратные трем, потом 4м - то сразу видно что &1 будет выглядеть обособлено. А зачем лишний раз тратить свое внимание на то, что может сделать компилятор ? Добавлено @ 13:49 тут тоже в 28 строке обычная математика: http://forum.vingrad.ru/index.php?showtopi...t&p=1916322 ну как, с ходу понятно, какое условие зашифровано в этой строке ? ![]() однако мне совесть не позволила оставить такой подход и пришлось написать по нормальному : http://forum.vingrad.ru/index.php?showtopi...t&p=1916495 логика работы примера стала более свободная и понятная, а операции деления в случае возможной замены на битовые операции компилятор сделает сам. Я думаю этот пример как раз показывает преимущества второго подхода над первым. ![]() Это сообщение отредактировал(а) mes - 11.7.2009, 15:24 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Для начала проверить файл на отсутствие в нем лишних символов, таких как пробел или перевод строки. можно посмотреть его реальный размер и убедиться, что файл со строчкой otvet занимает 5 байт. Вот тут Вы получили длину строки, а потом зачем то инкрементируете это значение. зачем ? покажите полностью участок кода по подсчету длины считанной последовательности. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |