Forum: Mikrocontroller und Digitale Elektronik Frage zu C-Code Parität


von Jason (Gast)


Lesenswert?

Moin,
ich schreib morgen ne Klausur in Microprozessortechnik. Es geht um das 
bilden einer Parität.
An PortA sind 8 Eingänge angeschlossen und daraufhin soll eine gerade 
oder ungerade Parität ausgegeben werden.  Bisher mache ich das mit ner 
for schleife und einer Maske mit bitshift die dann die einzelnen 
Ausgänge durchgeht.
Nun ist meine Frage ob ich das PORTA Register auch direkt mit Modulo 2 
verrechnen kann, also:

if(PORTA%2)
   //ungerade
else
   //gerade


Geht das oder müsste ich erst, z.B. ne Variable beschreiben?

Int a;

a = PORTA;

if(a%2)
//ungerade
else
//gerade

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jason schrieb:
> Nun ist meine Frage ob ich das PORTA Register auch direkt mit Modulo 2
> verrechnen kann,

PORTA ist ein Ausgang. Was willst Du da einlesen?

von Irgendwer (Gast)


Lesenswert?

Jason schrieb:
> gerade oder ungerade Parität

Du solltest dir mal Gedanken darüber machen welche "Parität" du haben 
willst:
https://de.wikipedia.org/wiki/Paritätsbit
https://de.wikipedia.org/wiki/Parität_(Mathematik)

von Einer K. (Gast)


Lesenswert?

Jason schrieb:
> if(PINA%2)
Das wird nix...
Damit kannst du nur "Even/Odd" ermitteln.
Für die Parität musst du Bits zählen.

> Built-in Function: int __builtin_parity (unsigned int x)
Aus: https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

von A. S. (Gast)


Lesenswert?

Es gibt Verfahren, die ein wenig schneller sind, ... Eine Lookup-Tabelle 
oder (mehrfach) Exklusives Oder. Das Schieben in der Schleife ist aber 
OK (wenn es funktioniert).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.