Operator | Beschreibung | Beispiel | ||
& |
bitweises UND der Operanden | k & l |
||
| |
bitweises ODER | k | l |
||
^ |
bitweises exklusives ODER | k ^ l |
||
<< |
Linksverschiebung der Bits von <op1> um <op2> Stellen | k << 2 // = k*4 |
||
>> |
Rechtsverschiebung der Bits von <op1> um <op2> Stellen | k >> 2 // = k/4 |
Wahrheitswertetafel:
x |
y |
x & y |
x | y |
x ^ y |
0 | 0 | 0 | 0 | 0 |
0 | L | 0 | L | L |
L | 0 | 0 | L | L |
L | L | L | L | 0 |
Diese Operatoren seien an den folgenden Beispielen demonstriert:
// bitwise operators #include <iostream.h> main() { short int k,l; short int n1,n2,n3,n4,n5,n6,n7; l = 5; // 0..000L0L = 5 k = 6; // 0..000LL0 = 6 n1 = ~k; // Complement L..LLL00L = -7 = -6 - 1 n2 = k & l; // bit-AND 0..000L00 = 4 n3 = k | l; // bit-OR 0..000LLL = 7 n4 = k ^ l; // bit-XOR 0..0000LL = 3 n5 = k << 2; // shift left by 2 0..0LL000 = 24 = 6 * 2^2 n6 = k >> 1; // shift right by 1 0..0000LL = 3 = 6 / 2^1 n7 = l >> 1; // shift right by 1 0..0000L0 = 2 = 5 / 2^1 } |
Die Bitoperationen sind nützlich beim Test, ob eine gerade oder ungerade Intergerzahl vorliegt. Das niederwertigste Bit kann bei Integerzahlen zur Unterscheidung gerade/ungerade Zahl genutzt werden (siehe auch die Bitdarstellung der Zahlen 5 und 6 im obigen Code). Wenn man daher dieses Bit mit einem gesetzten Bit über die ODER-Operation verknüpft, so bleibt das niederwertigste Bit bei ungeraden Zahlen unverändert. Dies wird im nachfolgenden Code ausgenutzt.
// mask for odd numbers #include <iostream.h> main() { const int Maske = 1; // 0..00000L int i; cout << " Zahl: "; cin >> i; // read number cout << " " << i << " ist eine "; // Check for odd number: // Last bit remains unchanged for odd numbers if ((i | Maske) == i) { cout << "ungerade"; } else { cout << "gerade"; } cout << " Zahl." << endl << endl; } |