Förenkla logiska uttryck - hur? [Löst]
Postat: 7 juli 2006, 11:50:38
Bakgrund: Har skrivit en mjukvaru-UART som klockas med 8 x BAUDRATE och samplar alltså varje inkommande bit 8ggr. För att vara säker på att varje bit ÄR 1 eller 0 så sparar jag de tre "mittersta" samplen för varje bit i motsvarande bit i variablerna a, b och c.
Skickar jag 0x53 borde det alltså se ut såhär:
a: 01010011 (sample 3)
b: 01010011 (sample 4)
c: 01010011 (sample 5)
Databehandling:
Om antalet nollor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 0
Om antalet ettor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 1.
Detta har jag löst med följande logiska uttryck, och det fungerar:
Men min fråga är; hur förenklar man detta uttryck?! Eller kan jag helt enkelt lita på att kompilatorn fixar det på effektivast sätt?
Skickar jag 0x53 borde det alltså se ut såhär:
a: 01010011 (sample 3)
b: 01010011 (sample 4)
c: 01010011 (sample 5)
Databehandling:
Om antalet nollor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 0
Om antalet ettor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 1.
Detta har jag löst med följande logiska uttryck, och det fungerar:
Kod: Markera allt
result = (~(a^b^c) & (a|b|c)) | (a&b&c); //Majority voting process..