Mengendalikan Nombor Negatif dalam Pengiraan Modulo dalam C/C /Obj-C
Dalam bahasa berasaskan C, operasi modulo menggunakan "% " operator boleh menunjukkan tingkah laku yang tidak dijangka apabila berurusan dengan nombor negatif. Secara khusus, hasilnya boleh berbeza daripada operasi modulo matematik.
Penjelasan Masalah
Sebagai konsep matematik, pembahagian modulo mengembalikan baki apabila satu nombor dibahagikan dengan yang lain. Walau bagaimanapun, dalam C/C /Obj-C, pengendali modulo mengutamakan mengekalkan tanda dividen (operand pertama) daripada memastikan baki positif. Ini boleh membawa kepada keputusan negatif walaupun apabila pembahagian matematik akan menghasilkan baki positif.
Sebagai contoh, pertimbangkan ungkapan "(-1) % 8". Secara matematik, ini sepatutnya mengembalikan 7 kerana 8 masuk ke -1 sekali dengan baki 7. Walau bagaimanapun, dalam C/C , hasilnya akan menjadi -1 kerana ia mengekalkan tanda dividen.
Penyelesaian dengan Pertimbangan Pelaksanaan
Untuk membetulkan keadaan ini, versi semakan pengendali modulo boleh dilaksanakan untuk mengambil kira nombor negatif:
<code class="c++">int customMod(int a, int b) { if (b < 0) { return -customMod(-a, -b); } int ret = a % b; if (ret < 0) { ret += b; } return ret; }</code>
Dalam versi yang dioptimumkan ini, jika satu daripada operan adalah negatif, ia membalikkan tanda kedua-duanya dan memanggil pengendali modulo tersuai secara rekursif. Selepas mengira baki, ia menyemak sama ada ia negatif dan menambah pembahagi untuk menjadikannya positif. Ini memastikan bahawa keputusan akhir mengekalkan baki matematik yang betul. Sebagai contoh, customMod(-1, 8) akan mengembalikan 7, manakala customMod(13, -8) akan mengembalikan -3.
Secara keseluruhan, pengendali modulo yang disemak ini berkesan mengendalikan nombor negatif dan menghasilkan keputusan yang sejajar dengan matematik jangkaan modulo.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nombor Negatif dalam Operasi Modulo dalam C/C /Obj-C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!