java - 运算顺序问题
大家讲道理
大家讲道理 2017-04-18 09:27:33
0
2
311

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
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(2)
黄舟

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++ :

a=3*3;//9
a=a+a;//18
a=a-a;//0

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.

int a=3;
int result=0;
result=a*a;//9
result=a+result;//3+9=12
result=a-result;//3-12=-9

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal