java代码
import javax.swing.*;
public class test12
{
public static void main(String[] args)
{
int a = 3;
a -= a += a * a;
System.out.println(a)
}
}
c++代码
#include <iostream>
using namespace std;
int main()
{
int a = 3;
a -= a += a * a;
cout << a << endl;
return 0;
}
为什么两个程序打印出的a的值不同,java是-9,c++是0
Ce problème n'a rien à voir avec les opérateurs, ils sont tous calculés de droite à gauche, mais la différence est causée par le traitement incohérent des types valeur par le compilateur.
Pour les langages de type gc, notamment (
java
,c#
,php
,javascript
), etc., les résultats des opérations intermédiaires des instructions à phrase unique seront mis en cache. Étant donné que C/C++ est directement compilé en instructions d’assemblage et n’a pas le support d’une machine virtuelle ou d’un moteur, cette étape ne sera pas possible.En termes simples, pour c++ :
C'est-à-dire que la valeur de a est un type de valeur et sera mise à jour à tout moment en cas de changement. Quelle que soit la valeur initiale de a, le résultat est 0. (a-a).
Cependant, pour les autres langages, la machine virtuelle ou le moteur enregistrera automatiquement les résultats de calcul de chaque étape.
Ci-dessus.
Extension : Recherche sur un algorithme d'addition bizarre en PHP
Ne vous inquiétez pas pour cela, ajoutez simplement () là où vous vous sentez vague.