2017-07-20 1 views
-6

Ich habe einen C-Code für meine Diplomarbeit zu mir gegeben. Kannst du mir bitte erklären, was das folgende Segment macht, weil ich sehr stark damit gepusht bin.Erklärung der Shift Operationals Verwendung in Bedingung

int i; 
_int8 codeword[64800]; 

//loop running through codeword 
if (codeword[i << 1] << 1 | codeword[i << 1 | 1]) 
    { 
     //more code here 
    } 

wobei i ein Schleifenzähler und Kodewort [] Ein 1d Matrix aus Einsen und Nullen

I meist Erläuterung der Suchoperationen stattfinden, wenn beispielsweise Codewort [i] 1 .

+0

@ user2079303 das Zugriffsmuster hier gegeben, ich würde sagen, es ist ein Haufen. – EOF

+0

Wenn Sie verwirrt sind, teilen Sie es in mehrere Zeilen auf und verwenden Sie temporäre Boolesche Werte, vorzugsweise solche mit aussagekräftigen Namen, um "einzeilige" zusammengesetzte Ausdrücke zu vermeiden. –

+0

Die zweite Verschiebung des ersten Ausdrucks ist unnötig, da jeder Wert ungleich Null die Bedingung wahr macht. –

Antwort

1

kombiniert den Test werden die 2 Bits in codeword Offset bei 2 * i und 2 * i + 1 und den Körper auswertet, wenn sie nicht beide 0 sind. Der Ausdruck wird analysiert als:

int i; 
_int8 codeword[64800]; 

//loop running through codeword 
if ((codeword[i << 1] << 1) | codeword[(i << 1) | 1]) { 
    // more code here 
} 

Beachten Sie, dass der Ausdruck äquivalent wäre aber besser lesbar als:

int i; 
_int8 codeword[64800]; 

//loop running through codeword 
if (codeword[2 * i] || codeword[2 * i + 1]) { 
    // more code here 
} 
Verwandte Themen