Z.B.
Code:
uint8_t maske;
maske=0;
if(a){maske|=(1<<7);}
if(b){maske|=(1<<6);}
if(c){maske|=(1<<5);}
if(d){maske|=(1<<4);}
PORTD&=maske;
(ungetestet)
Je nach dem wie abcd gesetzt sind, wird die Maske angepasst.
Die Maske ist in dem Beispiel abcd0000 (binär), wobei a,b,c,d jeweils 0 oder 1 sein können.
Sicherlich gibt es elegantere Lösungen.

Wozu möchtest du das verwenden? Je nach Aufgabe kann man das eventuell auch ganz anders lösen.