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가 처음에 어떤 값으로 설정되었든 결과는 0입니다. (a-a).
으아악단, 다른 언어의 경우 가상 머신이나 엔진이 각 단계의 계산 결과를 자동으로 저장합니다.
위.
확장: PHP의 이상한 덧셈 알고리즘 연구
이런 걱정은 하지 마시고, 애매모호한 부분에 ()만 추가하시면 됩니다.