Bits verschieben
-
Abend,
ich habe gerade ein kleines Bit-Problem
Ich kann ja innerhalb einer Variable Bits verschieben. Nur wie verschiebe ich Bits von einer Variable auf eine andere?Ich habe z.B. zwei Bytes: 01000001 und 01000010. Nun möchte ich die letzten 4 Bit vom ersten Byte und die ersten vier Bit vom zweiten Byte kombinieren. Letztendlich soll das Ergebnis in diesem Beispiel 00010100 sein.
-
Du kannst Masken Benutzen. Um die 4 ersten Bits eines Bytes zu bekommen, mach folgendes:
int x=???; int y=x&15;
15=00001111_2
Graphisch:
01000001 = x 00001111 = 15 ------------ & 0000[b]0001[/b] = y
Dann musst du mal 16 multiplizieren, damit die bits um 4 Stellen nach Links rutschen.
Um die 4 letzten benutzen wir folgende Maske:
int a=???; int b=x&240;
240=16*15=(2^4)*15=00001111 vier mal nach links geshiftet.
Graphisch:
01000010 = a 11110000 = 240 ------------ & [b]0100[/b]0000 = b
Damit b auch die bist in den 4 ersten bekommt, musst du durch 16 teilen, also
b/=16;
Und dann
int result=y|b;
Also:
int x=65; /* 65=01000001 */ int y=66; /* 66=01000010 */ int a=(x&15)*16; int b=(y&240)/16; int result=a|b; /* result=20=00010100 */
-
Wieso so umständlich und unverständlich?
unsigned int result = ((a & 0x0f) << 4) | ((b >> 4) & 0x0f);
-
groovemaster schrieb:
Wieso so umständlich und unverständlich?
unsigned int result = ((a & 0x0f) << 4) | ((b >> 4) & 0x0f);
damit er versteht, wie sowas zustande kommt
-
Danke, habt mir beide sehr geholfen.