Moin,
ich bin hier grade auf etwas gestoßen, dass mir komisch und überflüssig
erscheint.
Es geht um folgenden Codeausschnitt:
1 | short data[7];
|
2 | char currentData;
|
3 |
|
4 | if(i != 0 && i < 3)
|
5 | {
|
6 | if(currentData & 0x80) // MSB des Zweierkomplements vorhanden ?
|
7 | {
|
8 | data[i] = data[i] + (currentData - 256); // Subtraktion von der Gesamtsumme
|
9 | }
|
10 | else
|
11 | data[i] = data[i] + currentData; // Addition zur Gesamtsumme
|
12 | }
|
Dieser Code ist aus einem Programm für einen PIC18F2520 und es wurde ein
HITECH PICC18 Compiler benutzt.
Ich soll nun erstmal das Programm für neue Hardware mit einem AVR
portieren.
currentDara ist ein char (nicht unsigned) und wird von einer 8 Bit
Software SPI geselen, welche einen unsigned char zurück gibt.
Das Array data wird iteriert (i Laufindex). Ich hoffe ich nehme richtig
an, dass ein short genau wie ein int 16 Bit beträgt.
In den Felder data[1] und data[2] wird eine Summe gebildet. Da
currentData auch negativ sein kann (Zweierkomplement) wird hier per
if-else geprüft ob es positiv oder negativ ist.
Im positiven Fall wird einfach addiert. Im negativen Fall wird erstmal
der Wert 256 abgezogen und dann addiert.
Warum wird 256 abgezogen? Normal sollte eine Addition doch ausreichen
und das if-else ist überflüssig.
Übersehe ich den Grund für diesen Umweg über das if-else und die
Subtraktion oder ist dieses gebilde wirklich überflüssig und kann durch
data[i] += currentData ersetzt werden?