Arithmetische Verschiebung

In der Computerprogrammierung ist eine arithmetische Verschiebung ein Verschiebungsmaschinenbediener, der manchmal als eine unterzeichnete Verschiebung bekannt ist (obwohl es auf unterzeichneten operands nicht eingeschränkt wird). Für Binärzahlen ist es eine bitwise Operation, die alle Bit seines operand auswechselt; jedes Bit im operand wird einfach eine gegebene Zahl von Bit-Positionen bewegt, und die freien Bit-Positionen werden ausgefüllt. Anstatt mit dem ganzen 0s, als in der logischen Verschiebung gefüllt zu werden, als er sich nach rechts bewegt hat, hat der leftmost gebissen (gewöhnlich das Zeichen hat in unterzeichneten Darstellungen der ganzen Zahl gebissen) wird wiederholt, um alle freien Positionen auszufüllen (das ist eine Art Zeichen-Erweiterung).

Arithmetische Verschiebungen können als effiziente Weisen nützlich sein, Multiplikation oder Abteilung von unterzeichneten ganzen Zahlen durch Mächte zwei durchzuführen. Die Verschiebung verlassen durch n Bit auf einer unterzeichneten oder nicht unterzeichneten Binärzahl hat die Wirkung des Multiplizierens davon durch 2. Verschiebung direkt durch n Bit auf einer Ergänzung eines two hat unterzeichnet Binärzahl hat die Wirkung des Teilens davon durch 2, aber sie rundet immer (zur negativen Unendlichkeit) nach unten ab. Das ist von der Weise verschieden sich zu runden wird gewöhnlich in der unterzeichneten Abteilung der ganzen Zahl (der Runden zu 0) getan. Diese Diskrepanz hat zu Programmfehlern in mehr als einem Bearbeiter geführt.

Zum Beispiel, im x86 Befehlssatz, teilt die SAR Instruktion (arithmetische richtige Verschiebung) eine unterzeichnete Zahl durch eine Macht zwei, sich zur negativen Unendlichkeit rundend. Jedoch teilt die IDIV Instruktion (unterzeichnet teilen sich), eine unterzeichnete Zahl, sich zur Null rundend. So kann gegen eine SAR Instruktion nicht einen IDIV durch die Macht von zwei Instruktion noch umgekehrt ausgewechselt werden.

Formelle Definition

Die formelle Definition einer arithmetischen Verschiebung, vom Bundesstandard 1037C ist, dass es ist:

:A-Verschiebung, die auf die Darstellung einer Zahl in einem festen Basis-Zählen-System und in einem Festkommadarstellungssystem angewandt ist, und in dem nur die Charaktere, die den Teil des festen Punkts der Zahl vertreten, bewegt werden. Eine arithmetische Verschiebung ist gewöhnlich zum Multiplizieren der Zahl durch einen positiven oder eine negative integrierte Macht der Basis abgesehen von der Wirkung jedes Rundens gleichwertig; vergleichen Sie die logische Verschiebung mit der arithmetischen Verschiebung besonders im Fall von der Schwimmpunkt-Darstellung.

Nichtgleichwertigkeit der arithmetischen Verschiebung und Abteilung

Ein wichtiges Wort im FS 1073C Definition ist "gewöhnlich". Arithmetik ist abgereist Verschiebungen sind zur Multiplikation durch (positiv, integriert) Macht der Basis (z.B eine Multiplikation durch eine Macht 2 für Binärzahlen) gleichwertig. Arithmetik ist abgereist Verschiebungen, sind mit einer Ausnahme, identisch tatsächlich zu logischen linken Verschiebungen. Die Ausnahme ist die geringe Falle, dass arithmetische Verschiebungen arithmetische Überschwemmung auslösen können, wohingegen logische Verschiebungen nicht tun. Jedoch sind arithmetische richtige Verschiebungen Hauptfallen für das unvorsichtige.

Es wird oft festgestellt, dass arithmetische richtige Verschiebungen zur Abteilung durch (positiv, integriert) Macht der Basis (z.B eine Abteilung durch eine Macht 2 für Binärzahlen), und folglich gleichwertig sind, dass die Abteilung durch eine Macht der Basis durch das Einführen davon als eine arithmetische richtige Verschiebung optimiert werden kann. (Ein Schichtarbeiter ist viel einfacher als ein Teiler. Auf den meisten Verarbeitern werden Verschiebeanweisungen schneller durchführen als Abteilungsinstruktionen.) Setzt Guy L. Steele eine Vielzahl der 1960er Jahre und der 1970er Jahre an, Handbücher, Handbücher und andere Spezifizierungen von Gesellschaften und Einrichtungen wie DEZ, IBM, Daten Allgemein, und ANSI programmierend, die solche Erklärungen abgeben. Jedoch, wie Steele darauf hinweist, sind sie das ganze Unrecht.

Logische richtige Verschiebungen sind zur Abteilung durch eine Macht der Basis nur auf "N-1's-complement" Maschinen (für die Basis N) gleichwertig. Logische Verschiebungen von Binärzahlen sind nur zur Abteilung durch eine Macht 2 gleichwertig, wenn diejenigen Darstellung von unterzeichneten Zahlen ergänzen, wird zum Beispiel verwendet.

Diese Beschreibung ist von den Ergänzungsarchitekturen der älteren bis die Ergänzungsarchitekturen des neueren two falsch bekehrt worden. Mit den Ergänzungsbinärzahl-Darstellungen von two ist arithmetische richtige Verschiebung zur Abteilung durch eine Macht 2 nicht gleichwertig. Auf einer "N'S-Ergänzungs"-Architektur (für die Basis N) ist eine arithmetische Verschiebung zu einer Abteilung dass Runden zur negativen Unendlichkeit gleichwertig, nicht zur Null. Donald Knuth beschreibt das in Bezug auf eine Fußboden-Funktion.

So für negative Zahlen bricht die Gleichwertigkeit zusammen. Das trivialste Beispiel davon ist die arithmetische richtige Verschiebung der Nummer-1 (der als alle vertreten wird) in einer Ergänzungsdarstellung eines two, die-1 trägt. Eine arithmetische richtige Verschiebung der Nummer 1 trägt zum Vergleich 0. Das sind nicht die Ergebnisse von herkömmlichen, sich zur Null, Abteilung der ganzen Zahl rundend. (-1 geteilte durch 2 sind 0, wenn sie sich zur Null runden. Man hat zur Runde zur negativen Unendlichkeit, um die Antwort-1 nachzugeben.)

(1999) definiert der ISO Standard für die C Programmiersprache den Recht-Verschiebungsmaschinenbediener der c Sprache in Bezug auf Abteilungen durch Mächte 2. Wegen der oben erwähnten Nichtgleichwertigkeit schließt der Standard ausführlich von dieser Definition die richtigen Verschiebungen von unterzeichneten Zahlen aus, die negative Werte haben. Es gibt das Verhalten des richtigen Verschiebungsmaschinenbedieners in solchen Verhältnissen nicht an, aber verlangt stattdessen, dass jeder individuelle C Bearbeiter das Verhalten dessen angibt, negatives Wertrecht auszuwechseln.

Zeichen

Querverweis

Quellen verwendet


Arithmetische Überschwemmung / Automatische mehrmalige Bitte
Impressum & Datenschutz