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

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

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

全員に返信(2)
黄舟

この問題は演算子とは何の関係もありません。演算子はすべて右から左に計算されますが、その違いはコンパイラーによる値の型の処理が一貫していないことによって引き起こされます。
(javac#phpjavascript) などの gc 系言語の場合、単一文の命令の中間演算結果がキャッシュされます。 C/C++ はアセンブリ命令に直接コンパイルされ、仮想マシンまたはエンジンのサポートがないため、この手順は実行できません。
C++ の場合、平たく言えば:

リーリー

つまり、 a の値は値型であり、 a の変更に応じていつでも更新されます。 a が最初にどのような値に設定されていても、結果は 0 になります。 (a-a).
ただし、他の言語の場合、仮想マシンまたはエンジンは各ステップの計算結果を自動的に保存します。

リーリー

上。
拡張: PHP の奇妙な加算アルゴリズムに関する研究

いいねを押す +0
洪涛

気にしないで、曖昧な部分に () を追加してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート