Frage

In meiner Informatik II Klasse hält der Professor ++, -, * =, etc. 2 Operationen zu sein. Doch auf Baugruppenebene ist dies nicht wirklich zwei Operationen. Kann mir jemand erklären, oder ist dies nur aus Gründen der Einfachheit?

War es hilfreich?

Lösung

Ich würde tatsächlich halten es für 3 Operationen sein: Lesen, Schritt (oder was auch immer), schreiben. Das ist vorausgesetzt, es ist von einer Art von gemeinsam genutzten Speicher in eine Art von lokalen Speichern zu lesen (z registrieren oder Stapel), auf dem lokalen Speicher arbeitet, dann schreibe zurück.

Wie viele Operationen ist es auf Baugruppenebene wird davon abhängen, was Sie erhöht wird, um die Plattform, die Hardware etc.

Andere Tipps

Da ++ (ex: b ++) ist eine Vereinfachung von

b = b + 1 

Es gibt zwei Vorgänge aus, die Zugabe (b + 1) und dann der Zuordnung des Wertes der zusätzlich zu den ursprünglichen Variablen.

Warum sich die Mühe, wenn Komplexitätsanalyse zu tun? Es ist nur O (1): -)

EDIT: Bitte lassen Sie mich wissen, warum, wenn Sie es überstimmen. Da die Frage markiert Komplexität , gehe ich davon aus großer O Vorstellung das wichtigste ist, anstatt die tatsächlichen Konstanten. Außerdem, wie bereits in anderen Antworten erwähnt, wie viele Operationen dies ist, hängt von vielen Faktoren ab: die Art und Weise Sie Operationen, Plattform, Compiler zählen etc.

Ich werde ein paar Vermutungen werfen.

  • Ist Ihr Professor bezieht sich auf den interpretierten Sprachen?
  • ++ i ist anders als i ++ vielleicht ist er darauf Bezug?
  • Vielleicht seine Montage lang der Wahl muss die Zwischenspeichervariable?

    add reg_temp, reg_i, 1
    mov reg_i, reg_temp
    

Ist es nicht ein Zusatz plus eine Setter?

ähnlich wie bei i + = 1?

Der prof wahrscheinlich bezieht, nur um mit dem Wert zu nehmen, fügen Sie 1, um es und es dann auf die Variable zuweisen zurück.

Bei der Montageebene alles in Registern erfolgt so eine Variable in A mit

ADD AX,1

hat jedoch in kompilierten Sprachen alles so ++ wird i gespeichert werden (in Pseudo-assembly)

MOV AX,i
ADD AX, 1
MOV i, AX

Welche drei Operationen ist ... Wenn ich meine grundlegende Architektur völlig vergessen haben ...

Sie erinnerte mich an eine Kinda „ Jury ist nicht aus “ Problem, das ich vor langer Zeit gehört.

  

"Vorinkrement ist schneller als Postinkrement"

Ich habe gerade eine schnelle Google-Suche.

  1. Viele Menschen immer noch halten, dass als wahr.
  2. Andere behaupten, dass Compiler so optimiert wird, kann der Vergleich hohe Code-Code nicht verglichen werden.
  3. anderen Menschen behaupten, dass es keinen Unterschied .

Es sollte mehr als 2 meiner Meinung nach, da sie zwei Bedeutungen hat je nach dem Kontext, und ich habe mich immer an sie erinnern, wenn ich es sehe.

a = b++ ist die gleiche wie a = b; b = b + 1

und

a = ++b ist die gleiche wie b = b + 1; a = b

Das ist genug, um eine Verwirrung meisten Erstsemester von der Klippe zu senden.

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