Bitshift_In_C

Dependencies:   mbed

Committer:
martwerl
Date:
Thu Nov 15 17:52:21 2018 +0000
Revision:
0:3df45f23efb6
Bitshift_In_C

Who changed what in which revision?

UserRevisionLine numberNew 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