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
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?
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.