Vit (30.03.2014 06:39 - 06:41, просмотров: 38) ответил Mahagam на все варианты написали, осталось только вспомнить про битовые поля.
Все? Нифига:) Добавлю изврату #define _A 3
#define _B 2
#define _C 1
#define _D 0
//заполняем массивы
unsigned char _PB[]={0,0,0,0,(1<<_C),.....};
//_PB[1<<2] =( 1<<_C);
//_PB[1<<4] =( 1<<_D);
//_PB[(1<<2)|(1<<4)] =(1<<_C)|(1<<_D);
unsigned char _PD[]={0,0,0,0,(1<<_A),....};
//_PD[1<<2] =( 1<<_A);
//_PD[1<<5] =( 1<<_B);
//_PD[(1<<2)|(1<<5)] =(1<<_A)|(1<<_B);
// и достаём оттуда по правильному индексу:)
var =_PB[PINB & ((1<<4)|(1<<2))] | _PD[PIND & ((1<<5)|(1<<2))]