Rumah >Java >javaTutorial >Mengapa Operator Modulo Java Menghasilkan Nilai Negatif untuk Nombor Negatif?

Mengapa Operator Modulo Java Menghasilkan Nilai Negatif untuk Nombor Negatif?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 20:48:03435semak imbas

Why Does Java's Modulo Operator Yield Negative Values for Negative Numbers?

Nilai Modulus Negatif dalam Java

Soalan Asal:

Apabila menggunakan operator modulo dalam Java, nombor negatif kadangkala menghasilkan nilai negatif. Sebagai contoh, pengiraan int i = -1 % 2 menghasilkan -1, manakala dalam Python, pengiraan yang sama ini mengembalikan 1.

Penjelasan:

Perbezaan tingkah laku antara Java dan Python timbul daripada perbezaan antara modulus dan operasi selebihnya. Dalam Python, operator % melakukan operasi modulus, yang sentiasa mengembalikan hasil positif, walaupun untuk input negatif. Sebaliknya, operator % Java mengira bakinya, yang mungkin negatif untuk input negatif.

Penyelesaian:

Untuk mencapai gelagat yang sama seperti operasi modulo Python dalam Java, seseorang boleh mengikuti pendekatan ini:

  1. Menggunakan Modulus Secara Positif:
<code class="java">int i = (((-1 % 2) + 2) % 2);</code>

Dalam ungkapan ini, operasi modulus pertama kali dilakukan dalam kurungan, menghasilkan nilai negatif. Menambah 2 mengalihkan hasil ke dalam julat positif dan operasi modulus akhir memastikan ia berada dalam julat [0, 1].

  1. Menyemak Negativiti:
<code class="java">int i = -1 % 2;
if (i < 0) i += 2;</code>

Di sini, operasi modulus dengan nombor negatif dinilai terlebih dahulu. Jika keputusannya negatif, ia dinaikkan sebanyak 2 untuk mendapatkan modulus positif.

Pilihan pendekatan bergantung pada keperluan khusus dan kemudahan penyepaduan ke dalam pangkalan kod sedia ada.

Atas ialah kandungan terperinci Mengapa Operator Modulo Java Menghasilkan Nilai 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