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

Mengapakah Operator Modulus Java Menghasilkan Keputusan Negatif untuk Nombor Negatif?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 12:33:29484semak imbas

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)

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

-13 - (floor(-13 / 64) * 64)
= -13 - (-1 * 64)
= -13 + 64
= -13

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>

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>

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!

Kenyataan:
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