Bit-Darstellung
-
Hallo,
ich übergebe einer Funktion einen 16-Bit Wert.
int test(uint16_t i)
z.b. a = 129, ergo 0000000010000001
Diesen Wert möchte ich unterteilen, also quasi zwei 8 Bit Werte. Hierzu habe ich ein Beispiel gefunden.
a = i & 0xff; b = a >> 8;
Was genau läuft hier ab?
a = 0000000010000001 & 11111111
a = 10000001
b = 10000001 >> 8
b = 10000001
Korrekt?Danke & Gruss
-
int a = 129; char b = a & 0xFF; char c = a >> 8;
(Nullen vorne werden weggelassen)
a = 1000 00011111 1111
1000 0001
b = 1000 00011000 0001
8 Stellen nach rechts verschieben
c = 0000 0000
-
Danke für die schnelle Antwort
Ergo für
int a = 257; char b = a & 0xFF; char c = a >> 8;
a = 1 0000 0001
b = 0000 0001
und
c = 0000 0001
?
-
Wenn i 16 Bit ist hat und
zbsp. i sei 0111 0101 0010 1011a = i & 0xff;
dann ist a 0000 0000 0010 1011
anschliessend wird a um 8 stellen nach rechts geshiftet
b = a >> 8;
dann ist b 0000 0000 0000 0000
-
http://de.wikibooks.org/wiki/C-Programmierung:_Operatoren#Der_Shift-Operator
http://de.wikibooks.org/wiki/C-Programmierung:_Operatoren#.E2.80.A6_und_noch_etwas_LogikSollte eigentlich sehr verständlich sein
-
Danke.. Danach arbeite ich gerade..
also ist c = 0000 0001 korrekt?
-
#include <stdio.h> #include <stdint.h> void printBinary(uint16_t x, unsigned int max) { int i; for (i = max - 1; i >= 0; --i) { printf("%d", (x & (1 << i)) ? 1 : 0); } } int main() { int left, right; uint16_t x = 55111; printBinary(x, 16); printf("\n"); right = x & (1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7); // entspricht 0xFF (255 => 11111111) left = x >> 8; printBinary(left, 8); printf(" + "); printBinary(right, 8); printf("\n"); return 0; }
-
Danke
-
(1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7)