Bagaimana Mengendalikan Nombor Negatif dalam Operasi Modulo dalam C/C /Obj-C?

DDD
Lepaskan: 2024-11-02 23:10:29
asal
747 orang telah melayarinya

How to Handle Negative Numbers in Modulo Operations in C/C  /Obj-C?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!