UND-Verkn. Ergeb. ODER-Verkn. Ergeb. 0&0 0 0|0 0 0&1 0 0|1 1 1&0 0 1|0 1 1&1 1 1|1 1 Excl.ODER-Verkn. Ergeb. 0^0 0 0^1 1 1^0 1 1^1 0 Komplement Ergeb. ~0 1 ~1 0 Bsp. Unsigned char a,b,c; a=71; 0 1 0 0 0 1 1 1 b=47; 0 0 1 0 1 1 1 1 c=a&b 0 0 0 0 0 1 1 1 c=a|b; 0 1 1 0 1 1 1 1 c=a^b; 0 1 1 0 1 0 0 0 c=~b; 1 1 0 1 0 0 0 0 Die Shift-Operatoren << und >> verschieben das Bitmuster ihres linken Operanden um eine bestimmte Anzahl von Bit-Positionen nach links bzw. rechts. Die Anzahl der Bit-Positionen bestimmt der Wert des rechten Operanden. Beim Links-Shift (<<) werden 0-Bits von rechts her nachgeschoben. Die links herausgeschobenen Bits gehen verloren. Bsp. Unsigned short a=0x0D11; a<<=4; Bitmuster: 0000 1101 0001 0001 1101 0001 0001 0000 =0xD110 Beim Rechts-Shift (>>) werden von links her 0-Bits nachgeschoben, falls der linke Operand vom Typ unsigned oder einen nicht-negativen Wert hat. Andernfalls hängt es vom Compiler ab, ob mit 0-Bits (logischer Shift) oder mit Vorzeichen-Bits(arithmetischer Shift) aufgefüllt wird. Das Ergebnis einer Shift-Operation ist undefiniert, wenn der Wert des rechten Operanden negativ ist oder gleich oder größer als die Länge des linken Operanden in Bits. Bsp.: a<<=-4; undefiniert short a; a<<=28 undefiniert (short a = 16 Bit) Shift-Operatoren ermöglichen die effiziente und schnelle Möglichkeit, Multiplikationen und Divisionen mit Zweierpotenzen durchzuführen. Die Verschiebung des Bitmusters um n Stellen nach links (rechts) entspricht einer Multiplikation (Division) mit 2n Beispiel: int a=17; Bitmuster: 0...0001 0001 a*=4 a=68 effektiver: 4 entspricht 22 a<<=2 Bitmuster 0... 0100 0100 int a=128; 0…1000 0000 a/=2 64 Kommentare sie werden zwischen /* und */ geschrieben, können beliebig lang sein und an jeder Stelle des Programms stehen, an der auch Wortseparatoren stehen. |