@Harry, das ist keine Parity, damit wird nur ermittelt ob die Zahl
ungerade oder gerade ist.
Es gibt 3 unterschiedliche Algorithmen:
1.) Lookuptabelle: zB. für 8Bit Werte wird eine Lookuptabelle zu jedem
der 256 möglichen Werte gespeichert, Dies Tabelle enthält dann zu jedem
dieser Werte die Anzahl der gesetzten Bits. Ist diese Anzahl ungerade so
wäre Parity = 1. Man kann nun diese Tabelle schrittweise verkürzen. Denn
alle Werte von 0 bis 127 haben die negierte Parity zu allen Werten von
128 bis 255. Logisch da Werte >= 128 immer ein Bit mehr haben als deren
Parallelwerte zwischen 0 bis 127. Natürlich kann man dies weitertreiben
und wiederum die Tabelle halbieren auf 64 Einträge, usw. usw. Herraus
käme Algorithmus 2.)
2.) in einer Schleife wird der Wert solange durch 2 dividiert bis er 0
ist. Vor jeder Division durch 2 == rechtsshift wird überprüft ob der
Wert ungerade ist, und falls ja der Parity-Zähler inkrementiert. Man
zählt also die 1 Bits in dem Wert. Parity = BitAnzahl and 1.
3.)
A = 8 Bit Input
A = (A div 2^4) xor (A and 2^4 -1)
A = (A div 2^2) xor (A and 2^2 -1)
A = (A div 2^1) xor (A and 2^1 -1)
A = Parity
in C
A = (A >> 4) ^ (A & 0x0F)
A = (A >> 2) ^ (A & 0x03)
A = (A >> 1) ^ (A & 0x01)
Gruß Hagen