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
この問題は演算子とは何の関係もありません。演算子はすべて右から左に計算されますが、その違いはコンパイラーによる値の型の処理が一貫していないことによって引き起こされます。
リーリー(
java
、c#
、php
、javascript
) などの gc 系言語の場合、単一文の命令の中間演算結果がキャッシュされます。 C/C++ はアセンブリ命令に直接コンパイルされ、仮想マシンまたはエンジンのサポートがないため、この手順は実行できません。C++ の場合、平たく言えば:
つまり、 a の値は値型であり、 a の変更に応じていつでも更新されます。 a が最初にどのような値に設定されていても、結果は 0 になります。 (a-a).
リーリーただし、他の言語の場合、仮想マシンまたはエンジンは各ステップの計算結果を自動的に保存します。
上。
拡張: PHP の奇妙な加算アルゴリズムに関する研究
気にしないで、曖昧な部分に () を追加してください。