Hallo
Versuche gerade das Thema Bitmanipulation durchzuarbeiten und zu
verstehen.
Auf dieser Seite
https://www.mikrocontroller.net/articles/Bitmanipulation
steht das so:
1 | #define MEINBIT15 15
|
2 | #define MEINBIT42 42
|
3 |
|
4 | uint32_t reg_32; /* uint32_t definiert per typedef z. B. in stdint.h */
|
5 | uint64_t reg_64; /* uint64_t definiert per typedef z. B. in stdint.h */
|
6 |
|
7 | reg_32 |= (1 << MEINBIT15); /* FEHLER: Setzt die Bits 31 - 15, da ((int)1 << 15) == 0xFFFF8000 */
|
8 |
|
9 | reg_32 |= ((uint32_t)1 << MEINBIT15); /* Hier wird nur Bit 15 gesetzt. */
|
10 | reg_32 |= (1U << MEINBIT15); /* */
|
11 | reg_32 |= (1L << MEINBIT15); /* andere Schreibweise. */
|
12 | reg_64 |= (1LL << MEINBIT42); /* Hier wird nur Bit 42 gesetzt,
|
13 | andere Schreibweise für 64 Bit (long long). */
|
Wenn ich das richtig verstanden habe, haben MEINBIT15 und MEINBIT 42
jeweils uint8_t. Dies haben in disem Beispiel den wert von 15 und 42.
Bei 8 Bit können dise höchstens den Wert von 0-255 annnehmen.
Wenn ich beide Zahlen zusammen fassen möchte muss ich da nicht
schreiben:
1 | uint16_t reg16 |= 8<<MEINBIT15
|
damit verschienbe ich in reg16 (mit 16 Bit) MEINBIT15 um 8 Stellen nach
links und kann anschliessend MEINBIT42 dazunehmen.
Damit habe ich jetzt in reg16 als höchstes Bit MEINBIT15 zu stehen und
als tiefstes Bit MEINBIT42.
Im Beispiel gibt es auch reg_32. Ich kann als Beispiel auch 4 Zahlen mit
8 Bit in reg_32 zusammen führen.
Versteh ich das richtig so?