Помогите разобраться с правильностью условий, с принципом работы условий.
if (!(PINC & (0<<PINC1)))
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}
if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}
объясните пожалуйста как это работает...
1. Not_invented - 09 Августа, 2012 - 22:26:52 - перейти к сообщению
2. JohnAA - 16 Августа, 2012 - 12:53:38 - перейти к сообщению
if (!(PINC & (0<<PINC1)))//
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}
if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}
(0<<PINC1) всегда будет = 0
if (!(PINC & 0)) & логическое умножение (PINC & 0) всегда будет = 0
if (!0) - инверсия результата условие всегда выполняется
второй вариант без !
всегда не выполняется т.к. if (0)
я думаю здесь ошибка в (0<<PINC1) значение 0 сдвигать на PINC1 разрядов что будет всегда давать 0
(Добавление)
p.s. в языке C/C++ условие if будет верно при любом значении отличном от 0
например if(5) будет выполняться.
{ // (PIND0 = 0)
PORTA |= _BV(PA5);
}
if (PINC & (0<<PINC1))
{
PORTA &= ~_BV(PA5);
}
(0<<PINC1) всегда будет = 0
if (!(PINC & 0)) & логическое умножение (PINC & 0) всегда будет = 0
if (!0) - инверсия результата условие всегда выполняется
второй вариант без !
всегда не выполняется т.к. if (0)
я думаю здесь ошибка в (0<<PINC1) значение 0 сдвигать на PINC1 разрядов что будет всегда давать 0
(Добавление)
p.s. в языке C/C++ условие if будет верно при любом значении отличном от 0
например if(5) будет выполняться.