| 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;
}
|