-
- Епт! Посыпаю свою голову пеплом. Честно скажу, сегодня занят, читал невнимательно, понять не могу, о чем тут пишут, притом повторяются. Об одном и том же пишут. Щас опять мельком пробежался. И наткнулся на асмовскую строчку Mazur(107 знак., 06.09.2013 14:28 - 14:35)
- почему не ROR/ROL ? - zeleny(07.09.2013 19:00)
- LOL :) - RED_DRAGON(08.09.2013 14:01)
- Потому что на Си нет таких операторов. - Ксения(07.09.2013 20:38)
- а ANDI есть ? - zeleny(08.09.2013 15:54)
- Это есть. Выглядит, как: & - Ксения(08.09.2013 21:06)
- а ANDI есть ? - zeleny(08.09.2013 15:54)
- В чем прикол? Nikolay801_(17 знак., 06.09.2013 15:37)
- Прикол в том, что по всему топику мне это писали, а я и не обращал внимания на это. Точнее си мне еще непривычен. И был занят, читал бегло и выборочно. А в асмовской строке я сразу увидел, о чем мне все пишут. - Mazur(07.09.2013 18:25)
- может тебе пока заняться букварем вместо написания романа в 6-ти томах? Nikolay801_(74 знак., 09.09.2013 17:55)
- Точки с запятой нету; - tesla(07.09.2013 07:46)
- Прикол в том, что по всему топику мне это писали, а я и не обращал внимания на это. Точнее си мне еще непривычен. И был занят, читал бегло и выборочно. А в асмовской строке я сразу увидел, о чем мне все пишут. - Mazur(07.09.2013 18:25)
- почему не ROR/ROL ? - zeleny(07.09.2013 19:00)
- правильно сказано Nikolay801_(416 знак., 06.09.2013 10:07)
- Не факт. Нормальный компилятор сам преобразует leds/=2; в leds = leds >> 1 ; tesla(134 знак., 07.09.2013 07:55 - 07:58)
- Опять
блохбиты ловите. Не, так вы каши не сварите. - SciFi(07.09.2013 13:55) - Увы, это тоже не факт. В общем случае заменить деление Bill(143 знак., 07.09.2013 11:24)
- Да. Но это - проблемы компилятора. Ему ж прямо указывают, со знаком данные или без оного. - tesla(08.09.2013 19:54)
- Скорее всего, это проблемы программиста. Бывают случае, когда программист Bill(400 знак., 08.09.2013 21:01)
- "Бывают случае, когда программист недоволен тем, что ему нагенерировал компилятор и пытается исправить данный исходный текст на более, как ему кажется, оптимальный. " tesla(237 знак., 08.09.2013 21:11)
- Так пример выше был. -> Bill(866 знак., 08.09.2013 22:04, ссылка)
- Эээх, не бередите душу:) Молодым настоятельно рекомендую хотя бы один проект на Паскале (лучше Модуле, Обероне или Аде) сделать. Скрипач(47 знак., 08.09.2013 22:24)
- Так пример выше был. -> Bill(866 знак., 08.09.2013 22:04, ссылка)
- "Бывают случае, когда программист недоволен тем, что ему нагенерировал компилятор и пытается исправить данный исходный текст на более, как ему кажется, оптимальный. " tesla(237 знак., 08.09.2013 21:11)
- Скорее всего, это проблемы программиста. Бывают случае, когда программист Bill(400 знак., 08.09.2013 21:01)
- Почему? На некоторых компиляторах для знаковых величин старший бит распространяется при сдвиге вправо. - Юра(07.09.2013 12:17,
)
- На эту тему разговор уже был. Правда, на другом форуме. Все дело в том, что всякая замена должна быть Bill(585 знак., 07.09.2013 12:38 - 12:48)
- Гм... Это же не вопрос невозможности, правда? Что мешает учесть нечётность? Сдвиг+сложение все равно гораздо быстрее эмуляции деления. - Юра(07.09.2013 12:55,
)
- Так и я о том же. Замена возможна, и даже с учетом нечетности будет выполняться быстрее. Но... Bill(506 знак., 07.09.2013 13:07)
- Гм... Это же не вопрос невозможности, правда? Что мешает учесть нечётность? Сдвиг+сложение все равно гораздо быстрее эмуляции деления. - Юра(07.09.2013 12:55,
- На эту тему разговор уже был. Правда, на другом форуме. Все дело в том, что всякая замена должна быть Bill(585 знак., 07.09.2013 12:38 - 12:48)
- Да. Но это - проблемы компилятора. Ему ж прямо указывают, со знаком данные или без оного. - tesla(08.09.2013 19:54)
- Интересно, почему leds=leds/2 cокращают до leds/=2, а leds=leds>>1 не сокращают до leds>>=1? Причем, один и тот же человек. - Ксения(07.09.2013 09:52)
- Опять
- Не факт. Нормальный компилятор сам преобразует leds/=2; в leds = leds >> 1 ; tesla(134 знак., 07.09.2013 07:55 - 07:58)
- Встречный вопрос.Как на машине с АКП вручную переключать передачи? - plainuser(06.09.2013 07:34)
- Наверное это можно делать только если ручное управление именно в этой АКП предусмотрено. KT(371 знак., 09.09.2013 11:05)
- К чему этот вопрос? Я же не спрашиваю, как на асме сдвиги делать. С асмом авр вообще элементарно. Вот тебе прямые команды, как хочешь, так и распоряжаешься ими. - Mazur(06.09.2013 08:37)
- К тому что имея АК74 нужно косить очередями от "пуза" ,а не цеплять на него оптический прицел.Кроме безвыходных ситуаций.Уже приперло?Вряд-ли. - plainuser(06.09.2013 09:14)
- С тем же АК-47 тактика ведения боя зависит от ситуации. Можно от пуза стрелять, можно короткими очередями, и одиночными можно. И даже оптический прицел поставить. :) - Mazur(06.09.2013 09:49)
- Или это в порядке самообразования?Тогда конечно. - plainuser(06.09.2013 09:18)
- К тому что имея АК74 нужно косить очередями от "пуза" ,а не цеплять на него оптический прицел.Кроме безвыходных ситуаций.Уже приперло?Вряд-ли. - plainuser(06.09.2013 09:14)
- ...так же, как на 32-битке делается умножение dword на dword с последующим делением на dword, дающее в результате dword, без использования для промежуточного результата 64-битной переменной. Синтаксис варьируется, но суть его такова: Николай Коровин(1593 знак., 06.09.2013 03:32)
- Вот ещё одна очень полезная конструкция: i = ++i & 7; удобно использовать для выбора следующего шага шагового мотора, например. бомж(257 знак., 05.09.2013 21:44 - 22:51)
- У меня ваша полезная конструкция почему-то не компилируется: Apтём(108 знак., 05.09.2013 22:21)
- Странно, вроде нормальная конструкция. Как у вас переменная i определена? Или i - не переменная? - Bill(07.09.2013 12:00)
- АААА посыпаю голову пеплом, правильный синтакс i = ++i & 7; либо в две строки i++; i &= 7; - бомж(05.09.2013 22:48 - 23:02)
- Сущствует еще операция "запятая" ;) Можно и так (в одну строку) написать i++, i &= 7; - rezident(05.09.2013 23:10)
- Да, но i = ++i & 7; короче на один символ :-) - бомж(06.09.2013 00:55)
- Вы весьма вольно обращаетесь с операциями пре/пост/инкремента/декремента :-) amusin(388 знак., 06.09.2013 06:22)
- Вы ошибаетесь, в том конкретном месте программы мне именно это и было надо Array[++i & 3]; Либо пришлось бы писать i++; Array[i & 3]; что равноценно вышеприведённой конструкции. - бомж(06.09.2013 11:02)
- Ничего он не ошибается: "i = ++i & 7" - это undefined behaviour и точка. - SciFi(06.09.2013 11:07)
- ++ имеет более высокий приоритет, чем &. либо i объявлена volatile, либо у компилера мурашки - Vit(06.09.2013 11:55)
- Чота сегодня много еретиков повылазило. Читайте
Марксапервоисточник -> - SciFi(06.09.2013 11:58, ссылка)- первой должна выполниться более приоритетная операция. у ++ приоритет 16, у + 12. мне облом перечитывать Маркса. везде бред встречается. хотя ассоциативность у них разная - справа налево и слева направо - тут мурашки и живут. - Vit(06.09.2013 12:03)
- i=(i++)&7 -- проверь. - fk0(06.09.2013 12:07)
- Ага, давайте делать языку Си reverse engineering! Мануалы - для трУсов! :-) - SciFi(06.09.2013 12:11)
- "Чё я, не мужик что ли, чтоб инструкции читать". - fk0(06.09.2013 12:24)
- Ага, давайте делать языку Си reverse engineering! Мануалы - для трУсов! :-) - SciFi(06.09.2013 12:11)
- i=(i++)&7 -- проверь. - fk0(06.09.2013 12:07)
- первой должна выполниться более приоритетная операция. у ++ приоритет 16, у + 12. мне облом перечитывать Маркса. везде бред встречается. хотя ассоциативность у них разная - справа налево и слева направо - тут мурашки и живут. - Vit(06.09.2013 12:03)
- volatile :-) - amusin(06.09.2013 11:56)
- Чота сегодня много еретиков повылазило. Читайте
- В CodeVision это проходит без ошибок. Если в другом компиляторе ошибки возникают, надо писать по другому, чего спорить-то? бомж(68 знак., 06.09.2013 11:26 - 11:30)
- То есть тупо забить на переносимость кода? А ещё если с включенной оптимизацией перестанет работать, то тупо выключить оптимизацию. Это из рубрики "вредные советы". SciFi(134 знак., 06.09.2013 11:33 - 11:39)
- Оптимизация у меня всегда на максимуме, а кодевижн ошибок не показывает, я о них и не догадывался до сегодняшнего дня. Да и ошибка ли это? С точки зрения языка Це никакой ошибки нету! Сначала инкрименент, затем применение логического оператора &. бомж(64 знак., 06.09.2013 11:47)
- Блин, ну в стандарте же написано просто открытым текстом: SciFi(389 знак., 06.09.2013 11:53)
- Спасибо, не знал. Буду теперь писать i++; i = i & 7; Делов-то... - бомж(06.09.2013 12:07 - 12:14)
- После геморроя приключившегося однажды с безобидным на первый взгляд plainuser(123 знак., 06.09.2013 14:20)
- Я пишу ToRdoBuffer[i+3]=RDO_TxDataBuff[i], i++; Для того-то и нужен оператор запятая. - fk0(06.09.2013 14:48)
- Точно! Оператор запятая нужен именно для того, чтобы загнать всю программу в одну строчку :-) - SciFi(06.09.2013 14:52)
- Или чтобы в IF избавиться от фигурных скобок - Юра(06.09.2013 23:46,
)
- Когда простые вещи размазаны на 20 экранов -- программа точно также не читаема, а то и хуже, как когда выписывают по 10 операторов в строчку. - fk0(06.09.2013 14:57)
- Или чтобы в IF избавиться от фигурных скобок - Юра(06.09.2013 23:46,
- Точно! Оператор запятая нужен именно для того, чтобы загнать всю программу в одну строчку :-) - SciFi(06.09.2013 14:52)
- Я пишу ToRdoBuffer[i+3]=RDO_TxDataBuff[i], i++; Для того-то и нужен оператор запятая. - fk0(06.09.2013 14:48)
- Вот результат в асме бомж(107 знак., 06.09.2013 12:21)
- А чем не нравится "i = (i + 1) % 8;"? - SciFi(06.09.2013 12:24)
- Вот этим бомж(259 знак., 06.09.2013 12:32 - 12:34)
- На самом деле выражения Bill(100 знак., 07.09.2013 12:25)
- Кривой компилятор, гы. Сочувствую. А с другой стороны, ну и хрен с ними, с этими двумя лишними инструкциями. Убейте в себе
драконамелочного оптимизатора, и жить станет лучше, жить станет веселее. - SciFi(06.09.2013 12:44)Нихрена, в любом компиляторе мой вариант будет эффективнее! Моё кунфу лучше(c)Вот так получается одинаково :-) бомж(217 знак., 06.09.2013 12:47 - 12:56)- Это в вас
драконмелочный оптимизатор говорит. - SciFi(06.09.2013 12:56)
- Это в вас
- Вот этим бомж(259 знак., 06.09.2013 12:32 - 12:34)
- А чем не нравится "i = (i + 1) % 8;"? - SciFi(06.09.2013 12:24)
- После геморроя приключившегося однажды с безобидным на первый взгляд plainuser(123 знак., 06.09.2013 14:20)
- Спасибо, не знал. Буду теперь писать i++; i = i & 7; Делов-то... - бомж(06.09.2013 12:07 - 12:14)
- Блин, ну в стандарте же написано просто открытым текстом: SciFi(389 знак., 06.09.2013 11:53)
- Оптимизация у меня всегда на максимуме, а кодевижн ошибок не показывает, я о них и не догадывался до сегодняшнего дня. Да и ошибка ли это? С точки зрения языка Це никакой ошибки нету! Сначала инкрименент, затем применение логического оператора &. бомж(64 знак., 06.09.2013 11:47)
- То есть тупо забить на переносимость кода? А ещё если с включенной оптимизацией перестанет работать, то тупо выключить оптимизацию. Это из рубрики "вредные советы". SciFi(134 знак., 06.09.2013 11:33 - 11:39)
- ++ имеет более высокий приоритет, чем &. либо i объявлена volatile, либо у компилера мурашки - Vit(06.09.2013 11:55)
- Ничего он не ошибается: "i = ++i & 7" - это undefined behaviour и точка. - SciFi(06.09.2013 11:07)
- Вы ошибаетесь, в том конкретном месте программы мне именно это и было надо Array[++i & 3]; Либо пришлось бы писать i++; Array[i & 3]; что равноценно вышеприведённой конструкции. - бомж(06.09.2013 11:02)
- Вы весьма вольно обращаетесь с операциями пре/пост/инкремента/декремента :-) amusin(388 знак., 06.09.2013 06:22)
- i=(i+1)&7; - Юра(05.09.2013 23:12,
)
- Да, но i = ++i & 7; короче на один символ :-) - бомж(06.09.2013 00:55)
- Сущствует еще операция "запятая" ;) Можно и так (в одну строку) написать i++, i &= 7; - rezident(05.09.2013 23:10)
- У меня ваша полезная конструкция почему-то не компилируется: Apтём(108 знак., 05.09.2013 22:21)
- инлайн асм в помощь - zeleny(05.09.2013 22:40)
- Для беззнаковых. Для знаковых лучше в процессе привести к беззнаковым, ибо операция сдвига для знаковых не очень определена. fk0(300 знак., 05.09.2013 21:09)
- Си для домохозяек оторванных от жизни :) - отрок(06.09.2013 06:34,
)
- Не пугайте Мазура, а то он бросит Си и вернется к ассемблеру! :) - Ксения(05.09.2013 23:23)
- :) Думаю, определенный порог преодолен. Я на некоторое время забросил попытки. Иногда открывал книги, почитаю, опять брошу. Ждал когда накопится критическая масса. А вчера днем просто сел и дописал пример использования этого таймера. Конечно не Mazur(1238 знак., 06.09.2013 01:15)
- У меня по-молодости такая фигня тоже была. Чую : вот это надо изучить. Беру книгу, начинаю читать, понимаю 10%. То, что понимаю, читаю внимательно, остальное - пробегаю. И так изучаю всю доступную литературу по данной (и заодно параллельным) tesla(447 знак., 07.09.2013 08:51 - 08:55)
- Да лёд-то точно тронулся, сейчас процесс пойдёт :) - Николай Коровин(06.09.2013 03:58)
- :) Думаю, определенный порог преодолен. Я на некоторое время забросил попытки. Иногда открывал книги, почитаю, опять брошу. Ждал когда накопится критическая масса. А вчера днем просто сел и дописал пример использования этого таймера. Конечно не Mazur(1238 знак., 06.09.2013 01:15)
- 1UL<<sizeof(x) - Юра(05.09.2013 22:51,
)
- А то и 1ULL... Лучше (typeof(x))1<<sizeof... если компилятор позволяет. - fk0(06.09.2013 10:50)
- С х-макро - да не позволит? :))) - Юра(06.09.2013 23:35,
)
- С х-макро - да не позволит? :))) - Юра(06.09.2013 23:35,
- А то и 1ULL... Лучше (typeof(x))1<<sizeof... если компилятор позволяет. - fk0(06.09.2013 10:50)
- Си для домохозяек оторванных от жизни :) - отрок(06.09.2013 06:34,
- Увы! Утилизация флагов переноса - слабое место у Си. Т.е. не могёт он этого делать. - Ксения(05.09.2013 20:59)
- Но можно написать так: var=(var<<1)|(var>>7); - Ксения(05.09.2013 21:05)
- Разверните пожалуйста это выражение. Да, работает. Но как? Блин, как бы правильно. С точки зрения си. - Mazur(07.09.2013 21:27)
- 65432100 | 00000007 - Скрипач(07.09.2013 21:30)
- Словами, плиз. - Mazur(07.09.2013 21:31)
- Словами Скрипач(203 знак., 07.09.2013 21:34)
- Теперь понял, благодарю. - Mazur(07.09.2013 21:36)
- Словами Скрипач(203 знак., 07.09.2013 21:34)
- Словами, плиз. - Mazur(07.09.2013 21:31)
- 65432100 | 00000007 - Скрипач(07.09.2013 21:30)
- Нужно! и закрыть в макрос. Компилятор для ARM из такой шаблонной строки скорее всего сделает одну команду процессора. Другие варианты не факт. - отрок(06.09.2013 06:32,
)
- Разверните пожалуйста это выражение. Да, работает. Но как? Блин, как бы правильно. С точки зрения си. - Mazur(07.09.2013 21:27)
- Но можно написать так: var=(var<<1)|(var>>7); - Ксения(05.09.2013 21:05)
- Нету такой операции на Си. Apтём(252 знак., 05.09.2013 20:49)
- Епт! Посыпаю свою голову пеплом. Честно скажу, сегодня занят, читал невнимательно, понять не могу, о чем тут пишут, притом повторяются. Об одном и том же пишут. Щас опять мельком пробежался. И наткнулся на асмовскую строчку Mazur(107 знак., 06.09.2013 14:28 - 14:35)