C में % ऑपरेटर का परिणाम **पहले ऑपरेंड (डिविडेंड) का चिह्न** रखता है (C99 से मानकीकृत)।
नियम (C99 और बाद में)
(a / b) * b + (a % b) == a // भागफल (a/b) शून्य की ओर ट्रंकेट होता है // शेष (a%b) का चिह्न a के समान होता है
उदाहरण
#include <stdio.h>
int main() {
printf(" 7 %% 3 = %d\n", 7 % 3); // 1
printf(" 7 %% -3 = %d\n", 7 % -3); // 1 (चिह्न 7 का)
printf("-7 %% 3 = %d\n", -7 % 3); // -1 (चिह्न -7 का)
printf("-7 %% -3 = %d\n", -7 % -3); // -1 (चिह्न -7 का)
// प्रेसिडेंस उदाहरण
int a = 7, b = -10, c = 2;
printf("a %% b / c = %d\n", a % b / c); // (7 % -10) / 2 = 7 / 2 = 3
return 0;
}
आउटपुट
7 % 3 = 1 7 % -3 = 1 -7 % 3 = -1 -7 % -3 = -1 a % b / c = 3
C89 vs C99
- C89: नेगेटिव ऑपरेंड्स पर व्यवहार इम्प्लीमेंटेशन-डिफाइंड था।
- C99+: शेष का चिह्न डिविडेंड का चिह्न होता है (ट्रंकेटेड डिवीजन)।
- पायथन/मैथेमैटिक्स: फ्लोर डिवीजन उपयोग करते हैं (शेष का चिह्न डिवाइजर का होता है)।
पोर्टेबल पॉजिटिव मॉड्युलो
// हमेशा नॉन-नेगेटिव रिटर्न करता है (यदि b > 0)
int mod(int a, int b) {
int r = a % b;
return r < 0 ? r + b : r;
}