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

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)
黄舟

이 문제는 연산자와 관련이 없으며 모두 오른쪽에서 왼쪽으로 계산되지만 차이는 컴파일러의 값 유형 처리가 일관되지 않기 때문에 발생합니다.
(java, c#, php, javascript 등을 포함한 gc 유사 언어의 경우 단일 문장 명령어의 중간 연산 결과가 캐시됩니다. C/C++는 어셈블리 명령어로 직접 컴파일되고 가상 머신이나 엔진을 지원하지 않으므로 이 단계는 불가능합니다.
일반인의 관점에서 C++의 경우:

으아악

즉, a의 값은 값 유형이며 언제든지 변경사항으로 업데이트됩니다. a가 처음에 어떤 값으로 설정되었든 결과는 0입니다. (a-a).
단, 다른 언어의 경우 가상 머신이나 엔진이 각 단계의 계산 결과를 자동으로 저장합니다.

으아악

위.
확장: PHP의 이상한 덧셈 알고리즘 연구

洪涛

이런 걱정은 하지 마시고, 애매모호한 부분에 ()만 추가하시면 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿