Question

Dans mon cours d’informatique II, le professeur considère ++, -, * =, etc. comme 2 opérations. Cependant, au niveau de l'Assemblée, il ne s'agit pas vraiment de deux opérations. Quelqu'un peut-il expliquer ou est-ce juste par souci de simplicité?

Était-ce utile?

La solution

En fait, je considérerais cela comme 3 opérations: lire, incrémenter (ou peu importe), écrire. Cela suppose de lire une sorte de mémoire partagée dans une sorte de stockage local (par exemple, une pile ou un registre), en opérant sur le stockage local, puis en écrivant.

Le nombre d'opérations au niveau de l'assemblage dépendra de ce que vous incrémentez, de la plate-forme, du matériel, etc.

Autres conseils

Parce que ++ (ex: b ++) est une simplification de

b = b + 1 

Il y a deux opérations ici, l'addition (b + 1), puis l'affectation de la valeur de l'addition à la variable d'origine.

Pourquoi s'embêter à effectuer une analyse de complexité? C'est juste O (1): -)

EDIT: S'il vous plaît laissez-moi savoir pourquoi lorsque vous votez contre. Étant donné que la question est étiquetée complexité , je suppose que la notion de grand O est la plus importante, et non les constantes réelles. En outre, comme cela a déjà été mentionné dans d’autres réponses, le nombre d’opérations dont il s’agit dépend de nombreux facteurs: la manière dont vous comptez les opérations, la plate-forme, le compilateur, etc.

Je vais lancer quelques suppositions.

  • Votre professeur parle-t-il de langages interprétés?
  • ++ i est différent de i ++ peut-être qu'il fait référence à cela?
  • Peut-être que sa langue d'assemblage de choix a besoin de la variable de stockage intermédiaire?

    add reg_temp, reg_i, 1
    mov reg_i, reg_temp
    

N'est-ce pas un ajout plus un passeur?

Similaire à i + = 1?

Le prof fait probablement référence à l'obligation de prendre la valeur, de lui ajouter 1, puis de la réaffecter à la variable.

Au niveau de l'assemblage, tout est fait dans les registres, donc avoir une variable dans A

ADD AX,1

Cependant, dans les langages compilés, tout doit être stocké pour que i ++ devienne (dans le pseudo assemblage)

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

Ce qui correspond à trois opérations ... à moins d’avoir complètement oublié mon architecture de base ...

Vous m'avez rappelé un Kinda " Le jury n'est pas sorti ". problème que j’ai entendu il y a longtemps.

  

"Le préincrément est plus rapide que le postincrement"

Je viens de faire une recherche rapide sur Google.

  1. Beaucoup de gens considèrent toujours cela comme vrai.
  2. D'autres affirment que les compilateurs sont tellement optimisés que le code de code de haut niveau comparatif ne peut pas être analysé.
  3. Pourtant, d'autres personnes affirment qu'il n'y a pas de différence .

À mon avis, il devrait être supérieur à 2 car il a deux sens en fonction du contexte et je dois toujours me rappeler d'eux quand je le vois.

a = b ++ est identique à a = b; b = b + 1

et

a = ++ b est identique à b = b + 1; a = b

C’est assez de confusion pour envoyer la plupart des étudiants de première année hors de la falaise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top