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!