Rumah > Java > javaTutorial > Mengapakah Operator Modulus Java Menghasilkan Keputusan Negatif untuk Nombor Negatif?

Mengapakah Operator Modulus Java Menghasilkan Keputusan Negatif untuk Nombor Negatif?

Mary-Kate Olsen
Lepaskan: 2024-10-26 12:33:29
asal
565 orang telah melayarinya

Why Does Java's Modulus Operator Yield a Negative Result for Negative Numbers?

Pengiraan Modulus Java dengan Nombor Negatif

Di Java, pengendali modulus (%) mengira baki selepas pembahagian. Walau bagaimanapun, rawatan nombor negatif dalam pengiraan modulus boleh mengelirukan.

Masalahnya

Seorang pengguna mengalami percanggahan dalam hasil "-13 % 64" dalam Java, menjangkakan hasilnya menjadi 51 tetapi sebaliknya memperoleh -13. Mereka mempersoalkan jika pelaksanaan modulus mereka tidak betul.

Penjelasan

Java mengikut takrifan matematik modulus untuk nombor negatif, yang boleh berbeza daripada bahasa pengaturcaraan lain. Dalam kebanyakan kes, modulus nombor negatif ditakrifkan sebagai:

a % b = a - (floor(a / b) * b)
Salin selepas log masuk

Sebagai contoh, dalam kes "-13 % 64":

-13 - (floor(-13 / 64) * 64)
= -13 - (-1 * 64)
= -13 + 64
= -13
Salin selepas log masuk

Mungkin Penyelesaian

Jika hasil yang diingini ialah nombor positif untuk input negatif, ia boleh diperolehi dengan pengubahsuaian ini:

<code class="java">int r = x % n;
if (r > 0 && x < 0) {
    r -= n;
}</code>
Salin selepas log masuk

Sebaliknya, jika hasil yang diingini ialah nombor negatif untuk input negatif, pengubahsuaian berikut boleh digunakan:

<code class="java">int r = x % n;
if (r < 0) {
    r += n;
}</code>
Salin selepas log masuk

Pengubahsuaian ini melaraskan hasil berdasarkan tanda input dan hasil yang diingini.

Atas ialah kandungan terperinci Mengapakah Operator Modulus Java Menghasilkan Keputusan Negatif untuk Nombor Negatif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan