Operator Modulo Mengendalikan Nombor Negatif dalam C/C /Obj-C
Dalam C, C dan Obj-C, pengendali modulo (%) mengembalikan baki operasi bahagi. Walau bagaimanapun, ia boleh menghasilkan keputusan yang tidak dijangka apabila nombor negatif terlibat. Khususnya, (-1) % 8 menilai kepada -1 dan bukannya 7. Tingkah laku ini boleh mengecewakan pengaturcara yang mengharapkan tafsiran yang konsisten terhadap pengendali modulo.
Memahami Isu
Pengendali modulo ditakrifkan seperti berikut: x % y = x - (x / y) * y. Jika kedua-dua operan adalah bukan negatif, bakinya akan menjadi bukan negatif. Walau bagaimanapun, jika satu atau kedua-dua operan adalah negatif, tingkah laku itu ditentukan pelaksanaan. Ini bermakna penyusun dan persekitaran masa jalan yang berbeza mungkin menghasilkan hasil yang berbeza.
Penyelesaian untuk Mengendalikan Nombor Negatif
Untuk memastikan tingkah laku yang konsisten semasa mengendalikan nombor negatif, anda boleh menggunakan yang berikut fungsi:
<code class="c++">int mod(int a, int b) { if (b < 0) { // Check if the divisor is negative return -mod(-a, -b); // Recursively call mod with both operands negated } int ret = a % b; if (ret < 0) { ret += b; // Adjust the remainder if it's negative } return ret; }</code>
Fungsi ini mengendalikan dividen negatif dan pembahagi dengan betul. Contohnya, mod(-1, 8) mengembalikan 7 dan mod(13, -8) mengembalikan -3.
Pertimbangan Tambahan
Sementara mod() fungsi mengendalikan nombor negatif dengan betul, perlu diperhatikan bahawa ia mungkin tidak disokong oleh semua penyusun atau persekitaran masa jalan. Jika mudah alih membimbangkan, anda mungkin perlu menyemak secara eksplisit operan negatif dan melaraskan pengiraan dengan sewajarnya.
Dengan menggunakan fungsi mod() atau mengendalikan operan negatif secara manual, anda boleh memastikan bahawa operator modulo berkelakuan secara konsisten dalam kod C, C atau Obj-C anda, tanpa mengira nilai operan.
Atas ialah kandungan terperinci Bagaimanakah Pengendali Modulo Mengendalikan Nombor Negatif dalam C/C /Obj-C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!