Проверка четности?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

вот я немного задумался, а что лучше (правильнее) использовать для проверки четности?

проверять остаток от деления или младший бит?

а % 2
 или 
а & 1

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Мляяя. Вбей себе в мосх - 1 в младшем бите, - число НЕЧЕТНОЕ, это 2 в 0 степени. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну четность в программировании и в математики явления разные. Так в программировании если количество единиц в числе четное , то и число четное.

Задачка, которую хороший программист решит за пару минут, а хороший
физик сойдет с ума: Ася весит 4,2 метра. За сколько времени она
скачается, если ширина канала — 5 кило в секунду?

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

проверка четноСТИ и проверка четноГО - немного не одно и тоже....

5 % 2 = 1

5 & 1 = 1

вопрос звучал "что правильнее" а не "как найти четное"

 

если так сильно глаза это режет, то переиначу

!( а%2 )
или
!( а&1 )

 

Green
Онлайн
Зарегистрирован: 01.10.2015

Проверка на чётность. Найдено в алгоритмах.

bool parity(uint8_t v)
{
  v ^= v>>4;
  return 6>>((v ^ v>>2) & 3) & 1;
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

На как правильнее зарабатывать деньги. Будет естестенно ответ что их надо зарабатывать и не важно на какой работе. Вот так и счетностью. Смотреть надо на результат а не процесс.

b707
Онлайн
Зарегистрирован: 26.05.2017

ELITE пишет:

вопрос звучал "что правильнее" а не "как найти четное"

Если два метода дают одинаково правильный ответ, то вопрос - какой из них "правильнее" - смысла не имеет.

Сравнивайте по другому критерию. Может вас интересует какой быстрее? или меньше места в коде занимает?

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

В целом, конечно, логическая операция выполнится быстрее, чем деление, которого нет в AVR. Но в вашем случае не принципиально, потому что компилятор сгенерирует код, проверяющий младший бит числа.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

спасибо, это и требовалось услышать

b707
Онлайн
Зарегистрирован: 26.05.2017

ELITE пишет:

спасибо, это и требовалось услышать

интересно. сколько слов из ответа вы поняли? :)

sadman41
Offline
Зарегистрирован: 19.10.2016

...и что надо было в итоге - parity или делимость на 2?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

sadman41 пишет:

...и что надо было в итоге - parity или делимость на 2?

в итоге надо было мигающее ":" на экране часов между часами и минутами

b707
Онлайн
Зарегистрирован: 26.05.2017

ELITE пишет:

в итоге надо было мигающее ":" на экране часов между часами и минутами

это ЛОЛ

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

sadman41
Offline
Зарегистрирован: 19.10.2016

Для мигающего достаточно было state = !state

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

если есть секунды - зачем отводить еще одну переменную для ключа?

пусть мигает через секунду, меня это вполне устраивает

sadman41
Offline
Зарегистрирован: 19.10.2016

Это вопрос философский. Мне даже мигающего не нужно, к примеру. Ну, а если зрить в корень, то на загруженной системе может вполне себе "выпасть" две и более четные секунды. Это как "зеленую улицу" поймать.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

sadman41 пишет:

Это вопрос философский. Мне даже мигающего не нужно, к примеру. Ну, а если зрить в корень, то на загруженной системе может вполне себе "выпасть" две и более четные секунды. Это как "зеленую улицу" поймать.

не, я на 328 делаю - там ресурсов много, это не тини13, экономить нечего....

 

а мигание - как индикатор, что оно работает.... т.к. прочие показатели весьма статичны

sadman41
Offline
Зарегистрирован: 19.10.2016

Экономить нечего, а одного байта на качельку жалко ))

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

ELITE пишет:

в итоге надо было мигающее ":" на экране часов между часами и минутами

иоптваюмать. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ELITE пишет:

вот я немного задумался, а что лучше (правильнее) использовать для проверки четности?

проверять остаток от деления или младший бит?

а % 2
 или 
а & 1

А как это делается на 20-ти языках, которые Вы знаете "на уровне выше ..."?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

В каждом- по-разному, видима. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Мужики, а давайте не будем рассказывать ему про выход SQW у DS3231? А то вгоним в когнитивный диссонанс человека, когда он узнает, что и проверять-то ничего не надо - достаточно по факту прерывания моргать двоеточием и перерисовывать изменившиеся части.

Пожалеем профессора? А то тяжкая эта ноша - 20 языков на уровне выше университетского...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я в часах всегда мигаю на 1 герц, т.е. инвертирую раз в полсекунды. По-моему, гораздо симпатичнее получается.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

DIYMan пишет:

Мужики, а давайте не будем рассказывать ему про выход SQW у DS3231? А то вгоним в когнитивный диссонанс человека, когда он узнает, что и проверять-то ничего не надо - достаточно по факту прерывания .

Вот только кошерно в обработчике прерываний менять флаг. А моргать двоеточием и перерисовывать изменившиеся части все же в основном цикле. Но тогда чем это от millis отличается.

Цитата:

Пожалеем профессора? А то тяжкая эта ноша - 20 языков на уровне выше университетского...

Ну да. Вот я владею одним русским на уровне носителя языка и то тяжковато получается, а тут 20.

sadman41
Offline
Зарегистрирован: 19.10.2016

Квон, сам подумай - один байт сравнивать с единицей или вычислить разницу между двумя четырехбайтовыми и потом еще сравнить с четырёхбайтовым? И еще всякие сопутствующие...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

sadman41 пишет:

Квон, сам подумай - один байт сравнивать с единицей или вычислить разницу между двумя четырехбайтовыми и потом еще сравнить с четырёхбайтовым? И еще всякие сопутствующие...

А аппаратные затраты. пин и провода.   Если есть возможность экономить железо за счет софта то это делать желательно. Чем меньше контактов тем меньше маловычисляемых багов.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, кто как собирает =))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

qwone пишет:

А аппаратные затраты. пин и провода.   Если есть возможность экономить железо за счет софта то это делать желательно. Чем меньше контактов тем меньше маловычисляемых багов.

Пух прав ! Как никогда !

Green
Онлайн
Зарегистрирован: 01.10.2015

brokly пишет:

Пух прав ! Как никогда !


А тут ещё такая фишка бывает. При батарейном питании, случается так что Ардуино ещё работает, а DS3231 уже отключился, ну и SQW есстественно ушло. А тогда уже выручает millis. Хотя, это уже извращение.)

vlad072
Offline
Зарегистрирован: 01.08.2017

Всегда использовал остаток деления, и как то не задумывался что можно по другому. А действительно, "& 1" здесь как то уместней, или кошерней что ли ))

зы. Прикольно, простой вроде вопрос, а срача мегамозги наспамили целый воз...