Rumah >pembangunan bahagian belakang >C++ >Mengapa Operator Modulo Menghasilkan Keputusan Negatif dengan Nombor Negatif?

Mengapa Operator Modulo Menghasilkan Keputusan Negatif dengan Nombor Negatif?

Barbara Streisand
Barbara Streisandasal
2024-12-17 09:55:25205semak imbas

Why Does the Modulo Operator Produce Negative Results with Negative Numbers?

Pengendali Modulo Keputusan dalam Nilai Negatif: Penjelasan Matematik

Pengendali modulo %, apabila digunakan pada nombor negatif, boleh menghasilkan keputusan yang berbeza bergantung pada pelaksanaan. Ini boleh membingungkan, tetapi memahami definisi matematik pengendali modulo boleh menjelaskan tingkah laku ini.

Menurut ISO14882:2011(e) 5.6-4, pengendali modulo mengembalikan baki pembahagian ungkapan pertama dengan yang kedua. Jika operan kedua adalah sifar, tingkah laku tidak ditentukan. Untuk operan kamiran, hasil bagi ialah hasil bagi algebra dengan mana-mana bahagian pecahan dibuang.

Untuk menggambarkan ini, pertimbangkan contoh berikut:

std::cout << (-7 % 3) << std::endl; // -1
std::cout << (7 % -3) << std::endl; // 1

(-7 % 3) = -1

  • -7 dibahagikan dengan 3 menghasilkan hasil bagi algebra bagi -2.
  • -2 didarab dengan 3 memberikan -6.
  • Baki -7 dibahagikan dengan 3 oleh itu ialah -1.

(7 % -3) = 1

  • 7 dibahagikan dengan -3 menghasilkan hasil bagi algebra -2.
  • -2 didarab dengan -3 memberikan 6.
  • Baki 7 dibahagikan dengan -3 oleh itu ialah 1.

Ambil perhatian bahawa dalam kedua-dua kes, hasil bagi algebra adalah sama (-2). Perbezaan dalam baki terhasil daripada tanda yang ditentukan pelaksanaan bagi baki apabila kedua-dua operan mempunyai tanda yang berbeza.

Atas ialah kandungan terperinci Mengapa Operator Modulo Menghasilkan Keputusan Negatif dengan 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