то же самое да не то кто-то говорил, что такая запись правильна, а синтаксис то неверный оказался.
И парню не объяснили с чем сравнивается в условии WHILE в общем не до конца выложились.А постов то зато набили и пошутить успели.Неудивительно, что форумы никто читать не любит.
здравствуй те уважаемые форумчане!
Перехожу на Си, ничего не понимаю, поэтому не судите строго
задача: по приходу данных по UART генерируется прерывание по "завершению приема" и загорается светодиод. В симуляции прерывание происходит а то что внутри {} игнорируется, в чем можетбыть причина?
ISR ( USART_RX_vect )
{
switch(UDR)
{
LED_PORT &= ~ (1<<LED2);break;
}
}
Добрый вечер) Я новичок в СИ поэтому если вопрос глупый не пинайте)
Возможно ли сделать подобную операцию в СИ:
IF (a == 3 ИЛИ 4) {
if (b == 5 ИЛИ 6 ) {c = 1;} else {c = 0;};}
Тоесть если "а" соответствует трём или четырём, а "b" соответствует пяти или шести.
Как я понял после долких мук, операция "||" этого сделать не может.
int main(void){
unsigned int a,b,c;
a = 3;
b = 7;
while (1){
if ((a ==3)||(a == 4)) { //if1 если a = (3 или 4)
if ((b ==5)||(b == 6)) {c = 1;} //|условие
else {c = 0;} //|если не выполняется
}//end if1
}//end while
}//end main
И то если С- битовая переменная. Что будет присвоено переменной int в приведенном примере?
запутали человека он начинает думать о приоритетах операций и тд
Обновление проверил ваш код в одну строку не работает с int Обновление ,блин у вас неправильно условие записано не так как в начале задачи, поэтому и не сработало.
Если уж подсказывать, то с правильным условием
isx писал(а):Добрый вечер)
IF (a == 3 ИЛИ 4) {
if (b == 5 ИЛИ 6 ) {c = 1;} else {c = 0;};}
значит правильный и как я считаю более читаемый код будет
Заинтересовался что за символы ? и :
Оказалось что это тернарный оператор.
Только не нашел в книге в каком случае его можно использовать...
Книга Brian W. Kernighan, Dennis M. Ritchie второе издание в виде chm файла.
вот так и рождаются лишние посты.IfoR я же попросил написать в каких случаях можно использовать.а не приводить кучу непонятных примеров.примеры то есть в книге.а из описания только то что это тернарный оператор.
вы бы лучше написали логику работы,а мы бы уже думали в каком виде его применять.
vitalik_1984 писал(а):вот так и рождаются лишние посты.IfoR я же попросил написать в каких случаях можно использовать.а не приводить кучу непонятных примеров.примеры то есть в книге.а из описания только то что это тернарный оператор.
вы бы лучше написали логику работы,а мы бы уже думали в каком виде его применять.
результатом работы операции expr ? expr_1 : expr_2; является одно из двух значений: если значение expr не равно нулю, то результатом будет значение выражения expr_1, в противном случае expr_2.
по смыслу это очень похоже на действие оператора if, но с одной оговоркой: оператор if не создает значения, т.е. невозможно присвоить переменной значение оператора if, а операция? - возвращает результат. сравните:
мне кажется, тут сыграла роль одна тонкость перевода стандарта Си: ? - это ОПЕРАЦИЯ, т.е. действие, порождающее ЗНАЧЕНИЕ, а не ОПЕРАТОР, т.е. действие, не порождающее значение. видимо, при переводе однажды кто-то счел возможным подменить смысл слова ОПЕРАЦИЯ смыслом слова ОПЕРАТОР, и с тех пор и покатило...
+= это ОПЕРАЦИЯ, for - это ОПЕРАТОР. и т.
битва с дураками проиграна, победители торжествуют. слава победителям!
vitalik_1984, так я считал, что ты уже знаешь логику её работы, ведь об этом где только не пишут. Даже по твоему же "тернарный оператор" в поисковеке первая и последующие ссылки ведут на описание принципа её работы.
При каждом выполнении единичка будет двигаться из 0-го разряда влево с шагом 1 бит. Содержимое старших трёх битов не портится, по достижении 4-го разряда, при следующем выполнении, единичка пропадёт.
Т.е. с каждым исполнением будет так:
0bxxx00001
0bxxx00010
0bxxx00100
0bxxx01000
0bxxx10000
0bxxx00000
...
0bxxx00000
При каждом выполнении единичка будет двигаться из 0-го разряда влево с шагом 1 бит. Содержимое старших трёх битов не портится, по достижении 4-го разряда, при следующем выполнении, единичка пропадёт.
Т.е. с каждым исполнением будет так:
0bxxx00001
0bxxx00010
0bxxx00100
0bxxx01000
0bxxx10000
0bxxx00000
...
0bxxx00000
спасибо огромное! что-то я все не догадываюсь до реализации решений с битовыми операциями. не подскажите случайно, ресурс или источник, где можно проникнуться всем тонкостям работы с битами? в универе только начали дискретку, и то мне кажется, что там больше воды будет, чем конкретной практики(
Даже не знаю, просто со временем начнёте понимать "механику". Я вообще работаю только с МК AVR, т.е. только с шестью(если правильно посчитал) побитовыми лог. операциями. И естественно, никакое образование для этого особо не нужно, а описание самих операций можно уместить в пол-странички...