2016-10-01 2 views
-4

Ich bin Anfänger in C Programmiersprache, vor kurzem habe ich über Logik gelesen. Hat Ausdruck wie x >> 1 irgendeine Bedeutung in C?Hat >> in C irgendeine Bedeutung?

if (x >> 1) { 
    printf("%d", x); 
} 
+0

@Akshay erinnern, es ist Samstag Nacht in einigen [Teile der Welt] (https://msdn.microsoft.com/en-us/library/y0c1cfax.aspx). –

+2

Haben Sie versucht, '>>' auf einen bekannten Wert anzuwenden und dann das Ergebnis zu drucken? Was ist passiert? – Robert

Antwort

1

Der Operator >> ist der richtige Schichtbediener. Es nimmt den Wert auf der linken Seite und shitfs jedes Bit durch die Anzahl der Bits auf der rechten Seite.

Wenn zum Beispiel der Binärwert einer Variablen 00110 (6) ist, führt eine Verschiebung um 1 nach rechts zu 00011 (3). In ähnlicher Weise führt die Verschiebung von 01001 (9) um 2 zu 00010 (2). Also für vorzeichenlose Integer-Werte wird es effektiv durch eine Zweierpotenz abgerundet.

Wenn der linke Operand >> eine vorzeichenbehaftete ganze Zahl ist und einen negativen Wert hat, ist das Ergebnis eine Implementierung (Abschnitt 6.5.7 des aktuellen C standard). Bei den meisten üblichen Desktop-Implementierungen, die eine Zweierkomplementdarstellung von negativen Zahlen verwenden, wird in diesem Fall ein 1-Bit von links nach innen geschoben, um das Vorzeichen der Variablen zu erhalten.

Also 11111011 als ein vorzeichenbehafteter Wert (-5) rechtsverschoben um 1 ergibt 11111101 (-3). Wie bei den positiven Werten wird diese effektiv durch eine abgerundete Zweierpotenz geteilt.

In dem angegebenen Beispiel wird die Variable x um 1 nach rechts verschoben. Dann wird der Wert dieses Ausdrucks in einem booleschen Kontext ausgewertet, dh überprüft, ob er null ist oder nicht. Wenn der resultierende Wert ungleich Null ist, wird der Befehl printf ausgeführt.

+0

Beachten Sie das Beispiel '11111011' als signierten Wert (-5) wäre' signed char'. Dieses Recht zu verschieben ist ein durch die Implementierung definiertes Verhalten. –

Verwandte Themen