cari

Rumah  >  Soal Jawab  >  teks badan

java - 运算顺序问题

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
大家讲道理大家讲道理2919 hari yang lalu324

membalas semua(2)saya akan balas

  • 黄舟

    黄舟2017-04-18 09:29:33

    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

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 09:29:33

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

    balas
    0
  • Batalbalas