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

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

Patricia Arquette
Lepaskan: 2024-11-08 03:56:01
asal
443 orang telah melayarinya

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

Operator Modulus Mengendalikan Nombor Negatif dalam C/C /Obj-C

Tidak seperti dalam matematik, operator modulus (%) dalam C- bahasa terbitan mempamerkan tingkah laku yang tidak konsisten apabila digunakan pada nombor negatif. Percanggahan ini timbul daripada kekaburan yang mengelilingi tanda baki.

Tingkahlaku Ditentukan Pelaksanaan

Mengikut piawaian C 03, tanda baki apabila kedua-dua operan negatif adalah ditakrifkan pelaksanaan. Ini bermakna penyusun dan platform yang berbeza mungkin menghasilkan hasil yang berbeza untuk operasi seperti (-1) % 8 dan fmodf(-1, 8).

Ungkapan Boleh Dipercayai

Tanpa mengira pelaksanaan, ungkapan berikut adalah benar:

(a / b) * b + (a % b) == a
Salin selepas log masuk

Ungkapan ini menyatakan bahawa dividen (a) boleh dibina semula daripada hasil bagi (a / b) dan baki (a % b).

Penyelesaian

Satu pendekatan untuk memastikan tingkah laku yang konsisten bagi operan negatif ialah mengira baki seperti berikut:

<code class="cpp">int mod(int a, int b) {
  if (b < 0)
    return -mod(-a, -b);
  int ret = a % b;
  if (ret < 0)
    ret += b;
  return ret;
}</code>
Salin selepas log masuk

Fungsi ini mengendalikan operan negatif dengan menafikan kedua-dua operan dalam kes b adalah negatif. Bakinya dikira sebagai % b. Jika bakinya negatif, ia dilaraskan dengan menambah nilai mutlak b. Ini memastikan bahawa hasilnya adalah baki bukan negatif yang memenuhi ungkapan boleh dipercayai yang disebutkan di atas.

Dengan cara ini, mod(-1, 8) akan mengembalikan 7 dan mod(13, -8) akan kembali - 3, mematuhi tingkah laku matematik yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah Pengendali Modulus Mengendalikan Nombor Negatif 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan