Benutzer:ESCharlotte/Artikelentwurf

aus Wikipedia, der freien Enzyklopädie

Algorithmus zur bitweisen logischen Verknüpfung
Die 16 möglichen Operationen der zweiwertigen Logik mit jeweils zwei Operanden lassen sich in einer Funktion abbilden, wenn die Operationen tabellarisch in geeigneter Weise angeordnet werden.

Verknüpfungstabelle der zweiwertigen Logik für zwei Operanden
OP1 OP2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

Eine Implementierung in C
Die beiden Operanden op1 und op2 sind hier Festkommazahlen vom Typ int. Als Operationscode opc wird die Nummer der Spalte der entsprechenden Operation angegeben, also z.B. 8 für eine AND-, eine 6 für eine XOR-Verknüpfung u.s.w. Das Ergebnis einige Opearationen ist dabei nur von einem Operanden abhängig. So gibt die Operation mit dem opc=10 immer den Wert des zweiten Operanden op2 zurück, unabhängig vom Wert des ersten Operanden op1. Die Operation opc=3 negiert den ersten Operanden bitweise. Die Operationen mit den Spaltennummern 0 und 15 liefern immer konstante Ergebnisse und sind damit von beiden Operanden unabhängig.

 int BitOp(short opc,int op1,int op2){
   int rc = 0;short n = 8*sizeof(int);
   opc &= 15; short i = 0;
   do {
       int z = ((op1 % 2)<<1) + op2 % 2;
       rc += (1<<i) * (opc/(1<<z) % 2);
       op1 /= 2; op2 /= 2;
   } while( i++ < n );
   return rc;
 }