
Bitshift_In_C
main.cpp@0:3df45f23efb6, 2018-11-15 (annotated)
- Committer:
- martwerl
- Date:
- Thu Nov 15 17:52:21 2018 +0000
- Revision:
- 0:3df45f23efb6
Bitshift_In_C
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
martwerl | 0:3df45f23efb6 | 1 | #include "mbed.h" |
martwerl | 0:3df45f23efb6 | 2 | // Bitoperationen in C |
martwerl | 0:3df45f23efb6 | 3 | // & | ^ << >> |
martwerl | 0:3df45f23efb6 | 4 | |
martwerl | 0:3df45f23efb6 | 5 | // Logische Verknüpfungs-Operatoren |
martwerl | 0:3df45f23efb6 | 6 | // && || |
martwerl | 0:3df45f23efb6 | 7 | |
martwerl | 0:3df45f23efb6 | 8 | |
martwerl | 0:3df45f23efb6 | 9 | // Der Bitschiebe-Befehl in C/C++ |
martwerl | 0:3df45f23efb6 | 10 | |
martwerl | 0:3df45f23efb6 | 11 | int a; |
martwerl | 0:3df45f23efb6 | 12 | |
martwerl | 0:3df45f23efb6 | 13 | a = B#0001; // in a steht Binär 0001 |
martwerl | 0:3df45f23efb6 | 14 | |
martwerl | 0:3df45f23efb6 | 15 | a = a << 1; // in a steht jetzt B#0010 |
martwerl | 0:3df45f23efb6 | 16 | a = a << 1; // in a steht jetzt B#0100 |
martwerl | 0:3df45f23efb6 | 17 | |
martwerl | 0:3df45f23efb6 | 18 | a = a >> 2; // in a steht jetzt B#0001 |
martwerl | 0:3df45f23efb6 | 19 | a = a >> 1; // in a steht jetzt B#0000 |
martwerl | 0:3df45f23efb6 | 20 | |
martwerl | 0:3df45f23efb6 | 21 | |
martwerl | 0:3df45f23efb6 | 22 | // Bitwise OR |
martwerl | 0:3df45f23efb6 | 23 | |
martwerl | 0:3df45f23efb6 | 24 | B#1001 | B#0010 = B#1011 |
martwerl | 0:3df45f23efb6 | 25 | |
martwerl | 0:3df45f23efb6 | 26 | |
martwerl | 0:3df45f23efb6 | 27 | // Bits in einem Byte mit Bitwise-And abfragen |
martwerl | 0:3df45f23efb6 | 28 | |
martwerl | 0:3df45f23efb6 | 29 | B#1010 & B#0101 = B#0000 |
martwerl | 0:3df45f23efb6 | 30 | |
martwerl | 0:3df45f23efb6 | 31 | B#1010 & B#1000 = B#1000 |
martwerl | 0:3df45f23efb6 | 32 | |
martwerl | 0:3df45f23efb6 | 33 | // !!gezieltes!! abfragen ob ein Bit in einem Byte gesetzt ist |
martwerl | 0:3df45f23efb6 | 34 | |
martwerl | 0:3df45f23efb6 | 35 | 2^3 2^2 2^1 2^0 |
martwerl | 0:3df45f23efb6 | 36 | B# 0 0 0 0; |
martwerl | 0:3df45f23efb6 | 37 | |
martwerl | 0:3df45f23efb6 | 38 | int btn; |
martwerl | 0:3df45f23efb6 | 39 | |
martwerl | 0:3df45f23efb6 | 40 | if( btn & 1 ) B#xxxx & B#0001 |
martwerl | 0:3df45f23efb6 | 41 | printf("Bit0 ist gesetzt" |
martwerl | 0:3df45f23efb6 | 42 | |
martwerl | 0:3df45f23efb6 | 43 | if( btn & 2 ) B#xxxx & B#0010 |
martwerl | 0:3df45f23efb6 | 44 | printf("Bit1 ist gesetzt"); |
martwerl | 0:3df45f23efb6 | 45 | |
martwerl | 0:3df45f23efb6 | 46 | if( btn & 4 ) |
martwerl | 0:3df45f23efb6 | 47 | printf("Bit2 ist gesetzt"); |
martwerl | 0:3df45f23efb6 | 48 | |
martwerl | 0:3df45f23efb6 | 49 | if( btn & 8 ) |
martwerl | 0:3df45f23efb6 | 50 | printf("Bit3 ist gesetzt"); |
martwerl | 0:3df45f23efb6 | 51 | |
martwerl | 0:3df45f23efb6 | 52 | |
martwerl | 0:3df45f23efb6 | 53 | // Mit dem Bitwise-OR Bits in einem Byte setzen |
martwerl | 0:3df45f23efb6 | 54 | // ohne die schon gesetzen Bits zu zerstören |
martwerl | 0:3df45f23efb6 | 55 | |
martwerl | 0:3df45f23efb6 | 56 | int leds; |
martwerl | 0:3df45f23efb6 | 57 | |
martwerl | 0:3df45f23efb6 | 58 | leds = B#0001; // Bit0 ist gesetzt |
martwerl | 0:3df45f23efb6 | 59 | |
martwerl | 0:3df45f23efb6 | 60 | leds = B#0010; // Bit1 ist gesetzt aber Bit0 ist leider wieder gelöscht |
martwerl | 0:3df45f23efb6 | 61 | |
martwerl | 0:3df45f23efb6 | 62 | // Die Lösung ist, daß man Bits dazuverodert |
martwerl | 0:3df45f23efb6 | 63 | leds = leds | B#0010; // leds ist jetzt B#0011; |
martwerl | 0:3df45f23efb6 | 64 | |
martwerl | 0:3df45f23efb6 | 65 | |
martwerl | 0:3df45f23efb6 | 66 | |
martwerl | 0:3df45f23efb6 | 67 | // Logische operatoren |
martwerl | 0:3df45f23efb6 | 68 | |
martwerl | 0:3df45f23efb6 | 69 | int a = 1; |
martwerl | 0:3df45f23efb6 | 70 | int b = 1; |
martwerl | 0:3df45f23efb6 | 71 | |
martwerl | 0:3df45f23efb6 | 72 | int c = ( a && b ); |
martwerl | 0:3df45f23efb6 | 73 | |
martwerl | 0:3df45f23efb6 | 74 | int d = 5; // B#0101 |