Commençons par l'opérateur le plus simple, le signe plus (+). Le signe plus (+) est un opérateur binaire, c'est-à-dire que le signe plus ne relie que deux nombres, jamais le troisième ou plusieurs nombres connectés.
Par conséquent, « 1 plus 2 plus 3 » est exprimé dans l’ordinateur comme suit :
(1 + 2) + 3 // aor
1 + (2 + 3) // bBien que nous l'écrivions habituellement sous la forme 1 + 2 + 3, cela ne signifie pas que cela équivaut à 1+2+3 en mathématiques.
Alors, 1+2+3 en mathématiques représente-t-il a ou b ?
Si l'évaluation de l'ordinateur est associative à gauche, alors cette expression est équivalente au premier type a ; si elle est associative à droite, alors cette expression est équivalente au deuxième type b ;
La compréhension simple de 1 + 2 + 3 est « ajouter 1, 2 et 3 ensemble ». En effet, dans les mathématiques auxquelles nous sommes exposés, il s'agit d'ajouter trois nombres. Mais dans les langages de programmation, il n’y a pas que ça.
Comme mentionné précédemment, le signe + ne peut pas fonctionner avec trois nombres ou plus, et ne peut participer qu'à des opérations supplémentaires avec deux nombres.
À propos, plus et moins sont des opérateurs unaires, bien qu'ils utilisent les mêmes symboles que les opérateurs binaires d'addition et de soustraction, ils sont donc différents, alors ne tenez pas pour acquis que +4 est équivalent à 0+4. ils ne sont pas équivalents,
+4 est un entier, mais 0+4 est une expression d'addition, qui donne exactement +4.
En Java, nous pouvons écrire short a = +4, mais lorsque nous écrivons short a = 0 + 4, un avertissement est généré.
Il y a un autre exemple, également court,
court b = 1 ;
court b = b + 4; // avertissement
short b += 4; // Aucun avertissement. Alors, comment fonctionnent 1 + 2 + 3 ? Dans le langage de programmation de l'architecture de von Neumann, il y a un effet secondaire - j'ai l'habitude d'appeler cela "lorsque le processus informatique de l'ordinateur est différent du processus de pensée du cerveau du programmeur, cela s'appelle un effet secondaire" (bien qu'il n'est pas écrit comme ça dans le livre) Oui, mais je l'ai toujours pensé), à l'origine vous pensiez que ce serait comme ça, mais il s'avère que l'ordinateur ne fait pas ça, j'appelle ça un effet secondaire.
Si vous avez lu les "Déclarations et expressions" précédentes, cela peut être compris ainsi :
1 + 2 est une expression dont la valeur de retour est 3. La valeur de retour de cette expression est ensuite ajoutée à une autre expression 3 + 3, et le résultat final est 6.
Nous réécrivons ce code en utilisant Statement :
// Calculer 1 + 2 + 3
var a = 1 + 2 ;
var b = a + 3;Si nous évaluons cette expression en lisp, il n'y a aucun effet secondaire.
(+ (+ 1 2) 3) Si vous ne le comprenez pas encore, ou si cet exemple est trop spécial, changeons-le par un autre.
5 > 4 > 3 En mathématiques, cette équation est évaluée comme vraie. Lorsque nous écrivons ce code en langage C, il renvoie effectivement false.
La raison est la même que ci-dessus. Le signe supérieur à (>) est une opération binaire. Il ne peut pas comparer directement trois nombres. Le résultat renvoyé par 5 > 4 est vrai. Lorsque vrai est comparé à 3, vrai est converti en 1. qui est 1 > 3, le résultat final est naturellement faux.
Bref, on revient au point de vue de l'article « Déclarations et expressions » : chaque expression dans un langage de programmation a une valeur.
Bien que les opérateurs des langages de programmation soient identiques aux opérateurs mathématiques, ils ne sont pas équivalents. Lorsque vous écrivez un programme, écrivez-le pour que les gens puissent le lire ; lorsque vous déboguez un programme, vous devez apprendre à réfléchir à la signification du code de manière informatique.
J'ai l'habitude de comprendre les opérateurs comme des fonctions. Par exemple, 2 + 5 est en fait add(2, 5) ou 2.add(5). Vais-je vous dire en secret : « En fait, de nombreuses langues font cela ».