| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
C и как определить четное число
06.08.2012, 11:36
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
C и как определить четное число
Добрый день прошу прощения за ламерский вопрос...
104: warning: suggest parentheses around comparison in operand of &
Ругается компилятор.... На вот такой код.
if( Rendom & 0x1 ==1)
{return;}
А нужно если четное число то идем по такому сценарию, если нет то по другому, как это в AVRStudio организовать без ошибки. В программах на С реализую всегда так (Borland).
|
|
|
|
Сказали "Спасибо" bass1981
|
|
|
06.08.2012, 11:52
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: C и как определить четное число
Сообщение от bass1981
|
|
if( Rendom & 0x1 ==1)
|
if( Rendom & 0x01)
__________________
Осторожно , злой кот
|
|
|
|
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
|
|
|
06.08.2012, 12:54
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: C и как определить четное число
Тут дело в следующем. У Вас в скобках два логических оператора: битовое "И" (&) и оператор сравнения (==). Какой оператор будет выполняться первым? Вы привыкли, типа, слева направо. На самом деле в языке С есть таблица приоритетов операторов, то есть какой оператор будет выполняться первым при записи без скобок. Так вот, у Вас сначала выполнится сравнение 1==1, а потом уже битовое "И" результата сравнения и Rendom, так так у == выше приоритет, чем у &. Получится полная ерунда.
Поэтому более слабый оператор нужно взять в скобки для того, чтобы он выполнялся первым.
|
Код:
|
if( (Rendom & 0x1) ==1)
{return;} |
Об этом Вас компилятор и предупреждал ...
|
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
07.08.2012, 20:43
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: C и как определить четное число
Сообщение от Yurkin2007
|
|
if( (Rendom & 0x1) ==1)
|
==1 Лишнее не так ли ?
__________________
Осторожно , злой кот
|
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 20:47
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: C и как определить четное число
Да, для данного компилятора ==1 - лишнее.
|
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
07.08.2012, 20:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: C и как определить четное число
Сообщение от dosikus
|
|
==1 Лишнее не так ли ?
|
Вообще то, этим условием определяется нечетное число, четное определяется так:
|
Код:
|
if(! (Rendom & 0x1))
{return;} |
|
|
|
|
Эти 2 пользователя(ей) сказали Спасибо nonamedov за это сообщение:
|
|
|
07.08.2012, 20:58
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: C и как определить четное число
Сообщение от nonamedov
|
|
Вообще то, этим условием определяется нечетное число, четное определяется так:
|
Собственно зависит от фантазии кодописателя , что он дальше будет делать .
__________________
Осторожно , злой кот
|
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 21:02
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: C и как определить четное число
Вот, наличие оператора return сразу после if() говорит о том, что если Rendom нечётное, то программа тут же вываливается из процедуры. А если Rendom чётное, то продолжает выполнять процедуру.
Тэк что, фильтруется именно чётность
|
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Yurkin2007 за это сообщение:
|
|
|
07.08.2012, 21:08
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: C и как определить четное число
Yurkin2007, Значит у ТС еще и логическая ошибка .
И ка это он -
|
Цитата:
|
|
В программах на С реализую всегда так (Borland).
|
__________________
Осторожно , злой кот
|
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 21:29
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: C и как определить четное число
Щас спытал Борланд С++ на скорую руку. Оказывается, у него такие выражения мало того, что разрешены, они ещё имеют целое значение, типа
|
Код:
|
1 & true = 1
2 & true = 0 |
Так, что у топикстартера 1==1 заменялся на true, что есть просто 1, и потом спокойно делался битвайз "И" с Rendom. И всё работало как надо ...
|
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:46.
|
|