Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Pengendali Modulo Mengendalikan Nombor Negatif dalam C/C /Obj-C?

Bagaimanakah Pengendali Modulo Mengendalikan Nombor Negatif dalam C/C /Obj-C?

Susan Sarandon
Susan Sarandonasal
2024-11-03 04:11:02935semak imbas

How Does the Modulo Operator Handle Negative Numbers in C/C  /Obj-C?

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!

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