Warum arithmetische Verschiebung Hälften eine Zahl, die nur in EINIGEN Zwischenfällen?

StackOverflow https://stackoverflow.com/questions/2335418

  •  22-09-2019
  •  | 
  •  

Frage

Hey, ich bin selbst-lernen über die bitweise und ich sah, irgendwo im internet, dass die arithmetischen shift (>>) von einem Hälften eine Anzahl.Ich wollte ihn testen:

44 >> 1 returns 22, ok
22 >> 1 returns 11, ok
11 >> 1 returns 5, and not 5.5, why?

Ein Weiteres Beispiel:

255 >> 1 returns 127
127 >> 1 returns 63 and not 63.5, why?

Vielen Dank.

War es hilfreich?

Lösung

Die Bit-Shift-Operator nicht wirklich durch 2 teilen Stattdessen es verschiebt die Bits der Zahl auf der rechten Seite durch die Anzahl der Positionen auf der rechten Seite angegeben. Zum Beispiel:

00101100 = 44
00010110 = 44 >> 1 = 22

Beachten Sie, wie die Bits in der zweiten Zeile sind die gleichen wie die Zeile oben, lediglich eine Stelle nach rechts verschoben. Nun ein Blick auf das zweite Beispiel:

00001011 = 11
00000101 = 11 >> 1 = 5

Das ist genau der gleiche Vorgang wie zuvor. Um jedoch die Tatsache, das Ergebnis von 5 zurückzuführen ist, daß das letzte Bit nach rechts verschoben wird und verschwindet, um das Ergebnis 5. Aufgrund dieses Verhaltens zu schaffen, die Rechts-Verschiebungs-Operator im Allgemeinen äquivalent sein durch zwei zu teilen und dann wegzuwerfen jeder Rest oder Dezimalteil.

Andere Tipps

11 binär 1011

11 >> 1 

Mittel Sie verschieben Ihre binäre Darstellung nach rechts um einen Schritt.

1011 >> 1 = 101

Dann haben Sie 101 in binärer die 1 * 1 + 0 * 2 + 1 * 4 = 5.
Wenn Sie 11 >> 2 getan hätten, hätte man als Ergebnis 10 in binären hat d 2 (1 * 2 + 0 * 1).

Verschiebung um 1 nach rechts Transformiert sum (A_i * 2 ^ i) [i = 0..n] in Summe (A_ (i + 1) * 2 ^ i) [i = 0..n-1] warum das ist, wenn Ihre Zahl ist sogar (das heißt A_0 = 0) wird durch zwei geteilt. (Sorry für die maßgeschneiderte LateX Syntax ...:))

Binary hat kein Konzept von Dezimalzahlen. Es ist die verkürzte (int) Wert zurückgegeben wird.

11 = 1011 in binärer. Verschiebung nach rechts und Sie haben 101, die 5 in dezimal ist.

Bit-shifting ist die gleiche wie division oder Multiplikation mit 2^n.In integer-Arithmetik das Ergebnis wird abgerundet in Richtung null bis eine ganze Zahl.In floating-point-Arithmetik-bit-shifting ist nicht gestattet.

Intern bit-shifting, gut, verschiebt bits, und die Rundung bedeutet einfach, bits, fallen einem edge-einfach immer entfernt (nicht, dass es tatsächlich berechnen den genauen Wert und dann um ihn herum).Die neuen bits, erscheinen auf der gegenüberliegenden Seite sind immer Nullen für die Rechte Seite und für positive Werte.Für negative Werte, eins-bits angehängt, auf der linken Seite, so dass der Wert bleibt negativ (siehe wie Zweierkomplement Werke) und das arithmetische definition, die ich verwendet immer noch wahr.

In den meisten statisch typisierten Sprachen, der Rückgabetyp der Operation ist z.B. "Int". Dies schließt ein Bruchergebnis, ähnlich wie Integer-Division.

(Es gibt bessere Antworten über das, was ‚unter der Haube‘, aber Sie brauchen nicht diejenigen grok die Grundlagen des Typs System zu verstehen.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top