Hallo Newsgroup! Ich hätte da mal ne Frage zur Bitmanipulation: gegeben seien 2 Binärwerte: w1 = 11111111b w2 = 01011000b Ok. Jetzt möchte ich gerne (nur) die Bits 1-4 und 8 von w2 mit w1 so verknüpfen, dass w1 = 01111000b ergibt Wie löst man sowas am effektivsten? Mir fällt dazu nur ein, die gewünschten Bits einzeln durchzugehen und zu verknüpfen. Zozusagen eine Bitweise Kopie von w2 nach w1. Ist das richtig, oder gehts auch eleganter?
ähm, deine problembeschreibung blick ich nicht ganz, was willst du genau mit den bits in w1 und w2 machen, das bitmuster in w1 aber nur bits 1,2,3,4,8 sollen verwendet werden und was soll dann passieren?
Also im Grunde gehts um Folgendes: mein uC hat ein paar Ausgänge. Davon brauche ich 6-7 Stück für mein LCD. Nachdem das Ganze durch wiederverwendbaren Code realisiert werden soll, so dass man den Code auch auf nem uC verwenden kann, wo nur andere Ausgänge frei sind, möchte ich halt irgendwo definieren, welche Pins verwendet werden sollen.
Peter Pippinger wrote: > Hallo Newsgroup! > > Ich hätte da mal ne Frage zur Bitmanipulation: > > gegeben seien 2 Binärwerte: > > w1 = 11111111b > w2 = 01011000b > > Ok. Jetzt möchte ich gerne (nur) die Bits 1-4 und 8 von w2 mit w1 so > verknüpfen, dass > w1 = 01111000b > ergibt Das ergibt keinen Sinn. Welche Verknüpfung soll das sein? Welche Eigenschaften soll das Ergebnis haben? Beschreib das doch mal genauer, zb Im Ergebniss soll ein Bit genau dann 1 sein, wenn ..... (hier dann deine Erleuterung) > Wie löst man sowas am effektivsten? Indem man die Bitoperationen & (UND) bzw. | (ODER) oder Kombinationen davon auf alle 8 Bit gleichzeitig anwendet, so dass sich das Gewünschte ergibt.
>Das ergibt keinen Sinn. >Welche Verknüpfung soll das sein? >Welche Eigenschaften soll das Ergebnis haben? Beschreib das >doch mal genauer, zb Im Ergebniss soll ein Bit genau dann 1 >sein, wenn ..... (hier dann deine Erleuterung) w2 soll die Quelle der Bits sein. w1 soll das Ziel für die Bits aus w1 sein. Es sollen aber nur ausgewählte Bits von w2 nach w1 "kopiert" werden.
Sorry, so muss es lauten: w2 soll die Quelle der Bits sein. w1 soll das Ziel für die ausgewählten Bits aus w2 sein. Es sollen aber nur ausgewählte Bits von w2 nach w1 "kopiert" werden.
Peter Pippinger wrote: > Sorry, so muss es lauten: > > w2 soll die Quelle der Bits sein. > w1 soll das Ziel für die ausgewählten Bits aus w2 sein. > > Es sollen aber nur ausgewählte Bits von w2 nach w1 "kopiert" werden. Das ergibt immer noch keinen Sinn. Ich interpretiere mal frei: w2 ist eine Maske. Überall dort wo in w2 eine 1 steht, soll das Bit aus w1 in das ergebnis unverändert übernommen werden. Überall dort wo in w2 eine 0 steht soll auch im Ergebnis eine 0 sein. Das ist dann eine UND Verknüpfung, denn A B | A und B ---------|---------- 0 0 | 0 1 0 | 0 0 1 | 0 1 1 | 1 Nur in den Zeilen in denen B eine 1 aufweist, ist das Ergebnis identisch zum Zustand von A. Überall dort wo B 0 ist, ist auch das Ergebnis auf jeden Fall 0 Werden in C zwei Bytes (unsigned char) mit den Bitoperationen verknüpft, dann wird diese Bitoperation auf alle 8 Bits unabhängig voneinander angewandt: in deinem Fall w1 = 0b11111111; w2 = 0b01110000; res = w1 & w2;
Hi 1. : Bits werden von 0..7 numeriert. 2. (w1 AND 0b10001111) OR (w2 AND 0b01110000) MfG Spess
Ich glaube ich habe jetzt, was ich möchte: mask = 01110000b (invers maske) w1 = 11111111b ------------------ & = 01110000b = res1 mask = 10001111b (maske) w2 = 01011000b ------------------ & = 00001000b = res2 res1 = 01110000b res2 = 00001000b ------------------ & = 01111000b = ergebnis kann man das so machen?
res1 | res2 muß es heißen. oder so: w1=(w1&0111000b)|(w2&10001111b) Cheers Detlef
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.