Bitgruppe auf 0 stellen.
-
Ich weiss jetzt gar nicht ob das hierhin oder eher in richtung Mathe gehört. Ich steh gerade ziemlich auf den schlauch mit bitoperationen
ich möchte in einer längeren Bitfolge eine Bitfolge auf 0 setzten. Z.B. Bit 3 bis Bit 8 der Rest muss auf den Werten stehenbleiben wie sie gerade stehen.
z.B:
1001.0011.1111
wird dann zu
1001.0000.0011
Ich bin mir ziemlich sicher das sowas recht einfach ging. Komme aber nicht mehr drauf.Das gesamtziel soll eigentlich sein an diese Stelle also zwischen bit 3 und bit 8 eine bestimmte andere Bitfolge zu setzen. Daher wollte ich erstmal die alte Folge ausmaskieren. In eine zweite Variable den neuen Wert an die richtige stelle shiften und die beiden Variablen mit oder verknüpfen. Ggf gibts da noch bessere Wege?
-
erst mit "&" rausholen und dann mit "^" nullen...
-
__-- schrieb:
erst mit "&" rausholen und dann mit "^" nullen...
alternativ und evtl. schöner x&=~mask;
-
__-- schrieb:
__-- schrieb:
erst mit "&" rausholen und dann mit "^" nullen...
alternativ und evtl. schöner x&=~mask;
Damit hab ich das nun auch gemacht. Funktioniert gut.
Damit bin ich aber auf eine feste Maske beschränkt. Das ist für meinen Fall praktikabel da sich zwar die position der Maske ändern kann aber nicht die Länge. Rein der Interesse wegen würde mich aber noch eine Lösung interessieren die Dynamisch für verschiedene Bitlängen klappen würde.z.B. Bit 3-8 oder 5-12 bit 1-4 etc.... mein naiver ansatz wäre erstmal, da ich die grenzen kenne, dort in einer Schleife 1 reinzushiften bzw gleich alles auf 1 setzen und dann 0 an die entsprechenden Stellen shiften. Aber ggf gibts da nochwas effektiveres. Wie schon gesagt. Das ist jetzt rein der Interesse halber. Das Problem wurde schon gelöst.
-
Vielleicht findest du hier was: http://www-graphics.stanford.edu/~seander/bithacks.html
-
Bashar schrieb:
Vielleicht findest du hier was: http://www-graphics.stanford.edu/~seander/bithacks.html
unsigned int a,b,mask; a = 0x88; b = 0x4; mask = 0xF; a = a ^ ((a ^ b) & mask); a = 0x88; b = 0x4; mask = 0xF; a = (a ^ (a & mask)) | b; a = 0x88; b = 0x4; mask = 0xF; a = (a & ~mask) | b;
iwie gefällt mir das letzte immernoch am besten
-
__-- schrieb:
Bashar schrieb:
Vielleicht findest du hier was: http://www-graphics.stanford.edu/~seander/bithacks.html
unsigned int a,b,mask; a = 0x88; b = 0x4; mask = 0xF; a = a ^ ((a ^ b) & mask); a = 0x88; b = 0x4; mask = 0xF; a = (a ^ (a & mask)) | b; a = 0x88; b = 0x4; mask = 0xF; a = (a & ~mask) | b;
iwie gefällt mir das letzte immernoch am besten
da werden ja äpfel mit birnen verglichen... wenn dann müsste b=0x44 sein, dann bekommt man unterschiedliche ergebnisse