next up previous contents index
Nächste Seite: 3.6 Operationen mit vordefinierten Aufwärts: 3.5 Bitorientierte Operatoren Vorherige Seite: 3.5.1 Unäre bitorientierte Operatoren   Inhalt   Index


3.5.2 Binäre bitorientierte Operatoren

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
}
(siehe Ex350.cc)

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;
}
(siehe Ex351.cc)


next up previous contents index
Nächste Seite: 3.6 Operationen mit vordefinierten Aufwärts: 3.5 Bitorientierte Operatoren Vorherige Seite: 3.5.1 Unäre bitorientierte Operatoren   Inhalt   Index
Gundolf Haase 2004-01-15