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

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

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

membalas semua(2)
黄舟

Masalah ini tiada kaitan dengan operator, semuanya dikira dari kanan ke kiri, tetapi perbezaannya disebabkan oleh pemprosesan jenis nilai yang tidak konsisten oleh pengkompil.
Untuk bahasa seperti gc, termasuk (java, c#, php, javascript), dsb., hasil operasi perantaraan bagi arahan ayat tunggal akan dicache. Memandangkan C/C++ disusun terus ke dalam arahan pemasangan dan tidak mempunyai sokongan mesin atau enjin maya, langkah ini tidak akan dapat dilakukan.
Dalam istilah orang awam, untuk c++:

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

Maksudnya, nilai a ialah jenis nilai dan akan dikemas kini pada bila-bila masa sebagai perubahan. Tidak kira nilai a pada mulanya ditetapkan, hasilnya ialah 0. (a-a).
Walau bagaimanapun, untuk bahasa lain, mesin maya atau enjin akan menyimpan hasil pengiraan setiap langkah secara automatik.

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

Di atas.
Sambungan: Penyelidikan tentang algoritma penambahan aneh dalam PHP

洪涛

Jangan risau tentang perkara ini, cuma tambah () di tempat yang anda rasa samar-samar.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan