Beispielcode
int a = 40; // Binär: 0000000000101000
int b = a >> 3; // Binär: 0000000000000101, oder 5 dezimal
Anmerkungen und Warnungen
Wenn x um y Bits (x >> y) nach rechts verschoben wird und das höchste Bit in x eine 1 ist, hängt das Verhalten vom genauen Datentyp von x ab.
Wenn x vom Typ int ist, ist das höchste Bit das Vorzeichenbit, das bestimmt, ob x negativ ist oder nicht, wie oben diskutiert wurde.
In diesem Fall wird das Vorzeichenbit aus esoterischen historischen Gründen in niedrigere Bits kopiert:
int x = -16; // Binär: 1111111111110000
int y = 3;
int result = x >> y; // Binär: 1111111111111110
Dieses Verhalten, das als Zeichenerweiterung bezeichnet wird, ist häufig nicht das gewünschte Verhalten.
Stattdessen möchte man möglicherweise, dass Nullen von links nach innen verschoben werden.
Es stellt sich heraus, dass die Rechtsverschiebungsregeln für vorzeichenlose int-Ausdrücke unterschiedlich sind.
Man kann also eine Typumwandlung verwenden, um zu verhindern, dass die von links kopierten Werte verwendet werden:
int x = -16; // Binär: 1111111111110000
int y = 3;
int result = (unsigned int)x >> y; // Binär: 0001111111111110
Wenn du die Vorzeichenerweiterung sorgfältig vermeidest, kannst du den rechten Umschaltoperator >>
verwenden, um die Division durch Potenzen von 2 zu berechnen. Zum Beispiel:
int x = 1000;
int y = x >> 3; // Integer-Division von 1000 durch 8, wodurch y = 125.