Проверка четности?
- Войдите на сайт для отправки комментариев
Втр, 30/04/2019 - 17:54
вот я немного задумался, а что лучше (правильнее) использовать для проверки четности?
проверять остаток от деления или младший бит?
а % 2 или а & 1
Мляяя. Вбей себе в мосх - 1 в младшем бите, - число НЕЧЕТНОЕ, это 2 в 0 степени.
Ну четность в программировании и в математики явления разные. Так в программировании если количество единиц в числе четное , то и число четное.
проверка четноСТИ и проверка четноГО - немного не одно и тоже....
5 % 2 = 1
5 & 1 = 1
вопрос звучал "что правильнее" а не "как найти четное"
если так сильно глаза это режет, то переиначу
Проверка на чётность. Найдено в алгоритмах.
На как правильнее зарабатывать деньги. Будет естестенно ответ что их надо зарабатывать и не важно на какой работе. Вот так и счетностью. Смотреть надо на результат а не процесс.
вопрос звучал "что правильнее" а не "как найти четное"
Если два метода дают одинаково правильный ответ, то вопрос - какой из них "правильнее" - смысла не имеет.
Сравнивайте по другому критерию. Может вас интересует какой быстрее? или меньше места в коде занимает?
В целом, конечно, логическая операция выполнится быстрее, чем деление, которого нет в AVR. Но в вашем случае не принципиально, потому что компилятор сгенерирует код, проверяющий младший бит числа.
спасибо, это и требовалось услышать
спасибо, это и требовалось услышать
интересно. сколько слов из ответа вы поняли? :)
...и что надо было в итоге - parity или делимость на 2?
...и что надо было в итоге - parity или делимость на 2?
в итоге надо было мигающее ":" на экране часов между часами и минутами
в итоге надо было мигающее ":" на экране часов между часами и минутами
это ЛОЛ
Для мигающего достаточно было state = !state
если есть секунды - зачем отводить еще одну переменную для ключа?
пусть мигает через секунду, меня это вполне устраивает
Это вопрос философский. Мне даже мигающего не нужно, к примеру. Ну, а если зрить в корень, то на загруженной системе может вполне себе "выпасть" две и более четные секунды. Это как "зеленую улицу" поймать.
Это вопрос философский. Мне даже мигающего не нужно, к примеру. Ну, а если зрить в корень, то на загруженной системе может вполне себе "выпасть" две и более четные секунды. Это как "зеленую улицу" поймать.
не, я на 328 делаю - там ресурсов много, это не тини13, экономить нечего....
а мигание - как индикатор, что оно работает.... т.к. прочие показатели весьма статичны
Экономить нечего, а одного байта на качельку жалко ))
в итоге надо было мигающее ":" на экране часов между часами и минутами
иоптваюмать.
вот я немного задумался, а что лучше (правильнее) использовать для проверки четности?
проверять остаток от деления или младший бит?
А как это делается на 20-ти языках, которые Вы знаете "на уровне выше ..."?
В каждом- по-разному, видима.
Мужики, а давайте не будем рассказывать ему про выход SQW у DS3231? А то вгоним в когнитивный диссонанс человека, когда он узнает, что и проверять-то ничего не надо - достаточно по факту прерывания моргать двоеточием и перерисовывать изменившиеся части.
Пожалеем профессора? А то тяжкая эта ноша - 20 языков на уровне выше университетского...
Я в часах всегда мигаю на 1 герц, т.е. инвертирую раз в полсекунды. По-моему, гораздо симпатичнее получается.
Мужики, а давайте не будем рассказывать ему про выход SQW у DS3231? А то вгоним в когнитивный диссонанс человека, когда он узнает, что и проверять-то ничего не надо - достаточно по факту прерывания .
Вот только кошерно в обработчике прерываний менять флаг. А моргать двоеточием и перерисовывать изменившиеся части все же в основном цикле. Но тогда чем это от millis отличается.
Пожалеем профессора? А то тяжкая эта ноша - 20 языков на уровне выше университетского...
Квон, сам подумай - один байт сравнивать с единицей или вычислить разницу между двумя четырехбайтовыми и потом еще сравнить с четырёхбайтовым? И еще всякие сопутствующие...
Квон, сам подумай - один байт сравнивать с единицей или вычислить разницу между двумя четырехбайтовыми и потом еще сравнить с четырёхбайтовым? И еще всякие сопутствующие...
Ну, кто как собирает =))
А аппаратные затраты. пин и провода. Если есть возможность экономить железо за счет софта то это делать желательно. Чем меньше контактов тем меньше маловычисляемых багов.
Пух прав ! Как никогда !
Пух прав ! Как никогда !
А тут ещё такая фишка бывает. При батарейном питании, случается так что Ардуино ещё работает, а DS3231 уже отключился, ну и SQW есстественно ушло. А тогда уже выручает millis. Хотя, это уже извращение.)
Всегда использовал остаток деления, и как то не задумывался что можно по другому. А действительно, "& 1" здесь как то уместней, или кошерней что ли ))
зы. Прикольно, простой вроде вопрос, а срача мегамозги наспамили целый воз...
Спасибо, помогли: допустим есть число N0 и оно равно 22, т.е. - четное.
и, если сделать:
Все хорошо. Исправил.
на чётность абычна проверяют так:
у тебя неправильно
Проверять на чётность можно по разному. Вот ==true это лишнее.%2 достаточно - будет 0 - false для любого чётного, 1 - true для любого нечётного. Только вот сердце вещует, что компилятор для обоих записей даст одинаковый код.
не скажи, как у Деда это просто бит единички посмотреть )))
Что не сказать? Остаток от 2 тоже только первый разряд посмотреть.
от деления, это сдвиговые операции, и смотреться там будет флаг переноса
PS я тут как-то с Дракулой полемику развел насчет цикла for где счетчик сделан взад, а потом подумал подумал и пришёл к выводу, что программисты писавшие эту функцию компилятора большие головы, по сути сделали универсальную функцию и тут два затрагиваемых флага - благо...
на чётность абычна проверяют так:
у тебя неправильно
Мне почему то кажется, что обе записи в результате , после компиляции, дадут одинаковый код.
Мне почему то кажется, что обе записи в результате , после компиляции, дадут одинаковый код.
А Вы повнимательнее на #31 посмотрите. Комментарии почитайте. Там же всё наоборот перепутано.
Действительно :)
Исправил, ребят.
== true в 6 строке - лишнее
== true в 6 строке - лишнее
оно то да, но Дед так не считает, вроде как...если я ничё не путаю )))
оно то да, но Дед так не считает, вроде как...если я ничё не путаю )))
Не надо на Деда поклеп возводить, см. #32 ))
оно то да, но Дед так не считает, вроде как...если я ничё не путаю )))
Не надо на Деда поклеп возводить, см. #32 ))
буду думать, что "всё как говорили, токо немножко перепутали", появится может попинать меня чуток )))
оно то да, но Дед так не считает, вроде как...если я ничё не путаю )))
не путай. Если выражение отдаёт bool, тогда == true лишнее
if (isReady()) ... // здесь == true лишнее
Если выражение имеет тип int, тогда я стараюсь писать
if ((N & 0x01) == 0x01) ...
в #32 я просто написал по Сишному, чтобы не загромождать. Код одинаковый, только так мне нагляднее, что именно я проверяю
теперь надеюсь не забуду, то-есть
теперь надеюсь не забуду, то-есть
Плохая идея!
Гораздо аккуратнее сравнивать на "!= 0", чем на "== 1". Такое сравнение подведёт Вас в случае отрицательного N0, т.к. там остаток будет "-1" и Вы посчитаете число чётным.
Запустите и убедитесь сами
мда.
мда.
Что, я лопухнулся в чём-то?
ua6em,
можете ответить "любезностью на любезность" и подcказать мне по схемотехнике? Вопрос-то уровня песочницы, но поставил меня в тупик :-(
Вот смотрите, когда девайс питается постоянкой и у меня есть запас по напряжению, я всегда ставлю на входе питания диодный мост, чтобы не зависеть от того где у БП плюс, а где минус (а то у розеточных БП на центральном проводе бывает хоть то, хоть другое) :-(
А как быть в случае переменки, если мне не всё равно где ноль, а где фаза? Существует ли подобное по простоте решение вывести фазу именно туда, куда мне надо? Если существует, можете показать?