Checksummenberechnung

Hallo zusammen,

ich benötige einmal eure Hilfe was die Berechnung einer Checksumme nach folgender Formel angeht:

Message Checksum = (((Checksum >> 6) & 0x03) + (Checksum >> 3) + Checksum) & 0x07

Die Checksum beträgt 1555 Dezimal. Und komme dann über Bitverschiebung (>>) und Bitmanipulation (&) auf eine Message Checksum von 5 Dezimal.

Ich berechne dies wie folgt:

**((Checksum >> 6) & 0x03)[/u]
1555 Dez. = 0110 0001 0011 hex >> 6 (Bitverschiebung um 6 nach rechts)
[u]
0000 0001 1000 hex & 0x03 (betrachtung der niedrigsten 2 bit)[/u]
[u]
00 hex = 0 Dez.[/u]
[u]__
(Checksum >> 3)__[/u]
1555 Dez. = 0110 0001 0011 hex >> 3 (Bitverschiebung um 3 nach rechts)
[u]
0000 1100 0010 hex = 194 Dez.[/u]
[u]__
(((Checksum >> 6) & 0x03) + (Checksum >> 3) + Checksum) & 0x07__[/u]
0 Dez. + 194 Dez. + 1555 Dez. = 1749 Dez. = 0110 1101 0101 hex & 0x07 (betrachtung der niedrigsten 3 bit)
[u]
101 hex = 5 Dez.**[/u]
Message Checksum = 5 Dezimal.
Ich hoffe man kann nachvollziehen, was ich hier gerechnet habe.
Kann mir bitte jemand bestätigen, das meine Rechnung so richtig ist und die Message Checksum = 5 Dezimal beträgt?
Oder mir erläutern, wo mein Rechen- /Denkfehler liegt?
Vielen dank im voraus.
Gruß,
Norman

Die Berechnung sieht erstmal ok aus, die Formel ist aber merkwürdig.
Das Ergebnis ist nur 3 bit groß, und wertet nur 1 Byte große Eingangs-Werte aus.

1555 = 0x613 liefert das gleiche Ergebnis wie 0x13 : -> 0 + 2 + 3 = 5

Ja das stimmt, die Formel sieht sehr merkwürdig aus. Ist aber so fest in der SAE-J 1939 vorgegeben.

Mir war nur wichtig das ich diese ganzen Bitverschiebungen (>>) und Bitmanipulationen (&) richtig verstanden und umgesetzt habe.