Hallo liebe Gemeinde, Ich habe zwei uint8_t und den einen möchte ich mit den andere überschreiben. Ich will aber nur die untersten drei Bits überschreiben. z.B.: 01100000 00000100 = 01100100 (Das soll bei Rauskommen) Nur die untersten drei Bits sollen verändert werden. zweites Bsp.: 01100101 00000101 = 01100101 Die anderen 5 Bits von der ersten Variablen sollen so bleiben wie sie sind. Ich hoffe es ist verständlich. Lg Motze
Hallo, in deinem Beispiel werden nur Nullen zu Einsen, dann würde es so gehen:
1 | #include <inttypes.h> |
2 | #include <stdio.h> |
3 | |
4 | int main (void) |
5 | {
|
6 | setbuf(stdout, NULL); |
7 | uint8_t a = 0b01100000; |
8 | uint8_t b = 0b00000100; |
9 | uint8_t c; |
10 | c = a | (b & 0x07); |
11 | printf("%x", c); |
12 | }
|
Wenn es andersrum auch gehen soll, wirds komplizierter. Martin
:
Bearbeitet durch User
Hallo Motze, z.B.: 01100011 10000100 = 01100100 (Das soll bei Rauskommen) Hab dein Beispiel etwas abgeändert, damit es besser klar wird. Im oberen Wert hast du hinten 011 stehen. Du möchtest jetzt nur diese letzten 3 Bits durch die letzen 3 Bits der zweiten Zahl, also 100 ersetzen. Du brauchst dafür 2 Bit-Masken. Man könnte es bildlich so sagen: Die eine ist die Stanzmaske und die andere die Füllmaske. 1.) Die Stanzmaske (11111000) schneidet mit Hilfe des Bitoperators "AND" aus der oberen Binär-Zahl erstmal die letzten 3 Bits raus: 01100011 AND 11111000 = 01100000 Nun hat die obere Zahl bei den letzte 3 Bits quasi ein "Loch", das aus Nullen besteht. Und zwar genau dort, wo die Stanzmaske auch ihre Nullen hatte. 2.) Von der zweiten Zahl (10000100) sollen ebenfalls nur die letzten 3 Bits in das oben zuvor ausgestanzte "Loch" eingefügt werden. Dazu stanzt du jetzt die vorderen 5 Bits der zweiten Zahl weg. Wieder mit dem AND-Operator und diesmal eben mit den vorderen 5 Nullen der Füllmaske.: 10000100 AND 00000111 = 00000100 Die vorderen 5 Bits sind dadurch wieder zu einem "Loch" aus Nullen geworden, so dass nur noch die benötigten hinteren 3 Bits der ursprünglichen Zahl übrig sind. 3.) Jetzt kannst du mit dem Bitoprarator "ODER" bzw. "OR" die beiden aufeinander genau zugestanzten Werte "zusammenkleben": 01100000 OR 00000100 = 01100100 ==> Dein gewünschtes Ergebnis, das nur die letzten 3 Bits von der zweiten Zahl auf die letzten 3 bits der ersten Zahl übertragen hat...
Martin B. schrieb: > Wenn es andersrum auch gehen soll, wirds komplizierter. Warum komplizierter? 'Simon S.' hat es in einer Zeile vorgemacht, und 'Simpel' hat das ganze nochmal ausführlich erklärt.
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.