Bit vertauschen
-
Warum nicht einfach std::bitset verwenden?
// Bits: std::bitset<32> myBits; // Bits vertauschen: std::swap(myBits[3], myBits[5]); // Abfragen: if (myBits.test(4)) ...Warum immer kompliziert?

-
char a = 0; // kein Bit gesetzt (Bit 0 bis 7 == 0) a = (a | 1<<3); // Bit 3 setzen ( or ) a = (a ^ 1<<3); // Bit 3 umkippen (toggeln) (xor) ist nun wieder 0 a = (a & 1<<3); // Bit 3 testen (and) ist 0 a = (a ^ 1<<3); // Bit 3 toggle (xor) ist nun 1 a = (a & 1<<3); // Bit 3 testen (and) ist 1 a = (a & ~(1<<3)); // Bit 3 loeschen
-
@Fellhuhn: ich mag deine Antwort! std 4thewin
... aber du mußt den anderen jetzt noch sagen, daß hier die bits von "links" gezählt werden. (Bit 0 ist das Most Significant Bit (MSB), Bit 31 ist das LSB). Nicht daß sich hier einer noch verzählt.
@fr33g: Du kannst mit bitset Deine 8bit Flagge auch lesbarer als mit einem "Buchstaben" initialisieren:
bitset<8> flag (string("01010011"));Hier die noch mehr Info zum bitset: http://www.cplusplus.com/reference/stl/bitset/
-
ok dankeschön
jetzt kapier ichs=)bzw eine kleine frage noch:
Wann muss ich von links ab zählen mit 0 und wann von rechts??
-
Das ist eine "Vereinbarungssache" bzw Definitionssache, wann man von links oder rechts zählt.
Was ich sagen will: es gibt Hardware-Architekturen, da ist das Bit ganz links bit #0 (zB Power). Und bei Intel ist Bit#0 ganz rechts.
Bei mir an der Uni wurde immer von rechts gezählt (war ja auch logisch: bit #0 == 2 hoch 0 ). Damals wurde mir erzählt, daß Intel, Motorola etc von rechts zählen und IBM von links. Da war dann von rechts bei mir also normal.
Bei mir in der Firma zählt man immer von Links. Also ist das für mich inzwischen "normal".
-
fr33g schrieb:
...
bzw eine kleine frage noch:Wann muss ich von links ab zählen mit 0 und wann von rechts??
Nehm z.B. die Zahl 1 als Wert einer Integer-Variablen, da ist immer das Bit 0 = 1 !
Egal wo dieses Bit in Wirklichkeit im Speicher steht, beim Code schreiben steht es für Dich ganz rechts !
Denn 1 << 1 (Bits um 1 Position nach links schieben) Multiplikation mit 2, 1 << 2 Multiplikation mit 4 usw.
bzw. 1 >> 1 (Bits um 1 Position nach rechts schieben) Division durch 2 (Integerdivision 1/2 = 0)