c++ tutorial नकारात्मक मूल्यों के साथ मॉड्यूलो ऑपरेटर




the c++ programming language (3)

ऐसे ऑपरेशन क्यों करते हैं:

std::cout << (-7 % 3) << std::endl;
std::cout << (7 % -3) << std::endl;

अलग-अलग परिणाम दें?

-1
1

https://code.i-harness.com


आईएसओ 14882: 2011 (ई) 5.6-4 से:

द्विआधारी / ऑपरेटर मात्रा उत्पन्न करता है, और बाइनरी% ऑपरेटर शेष को दूसरी अभिव्यक्ति के विभाजन से दूसरे को उत्पन्न करता है। यदि दूसरा ऑपरेंड / या% शून्य है तो व्यवहार अपरिभाषित है। अभिन्न ऑपरेशंस के लिए / ऑपरेटर बीजगणितीय भाग को किसी भी आंशिक भाग के साथ छोड़ देता है; यदि परिणाम ए / बी परिणाम के प्रकार में प्रतिनिधित्व योग्य है, (ए / बी) * बी + ए% बी बराबर है।

शेष मूल गणित है:

(-7/3) => -2
-2 * 3 => -6
so a%b => -1

(7/-3) => -2
-2 * -3 => 6
so a%b => 1

ध्यान दें कि

यदि दोनों ऑपरेशंस गैर-ऋणात्मक हैं तो शेष अनावश्यक है; यदि नहीं, शेष का संकेत कार्यान्वयन-परिभाषित है।

आईएसओ 14882: 2003 (ई) से अब आईएसओ 14882: 2011 (ई) में मौजूद नहीं है


ऐसे मामलों में संकेत (यानी जब एक या दोनों ऑपरेशंस नकारात्मक होते हैं) कार्यान्वयन-परिभाषित होता है। स्पेस §5.6 / 4 (सी ++ 03) में कहता है,

द्विआधारी / ऑपरेटर मात्रा उत्पन्न करता है, और बाइनरी% ऑपरेटर शेष को दूसरी अभिव्यक्ति के विभाजन से दूसरे को उत्पन्न करता है। यदि दूसरा ऑपरेंड / या% शून्य है तो व्यवहार अपरिभाषित है; अन्यथा (ए / बी) * बी + एक% बी बराबर है। यदि दोनों ऑपरेशंस गैर-ऋणात्मक हैं तो शेष अनावश्यक है; यदि नहीं, शेष का संकेत कार्यान्वयन-परिभाषित है

यही भाषा है, जहां तक ​​सी ++ 03 का संबंध है।


a % b

सी ++ डिफ़ॉल्ट में:

(-7/3) => -2
-2 * 3 => -6
so a%b => -1

(7/-3) => -2
-2 * -3 => 6
so a%b => 1

पायथन में:

-7 % 3 => 2
7 % -3 => -2

सी ++ में पायथन में:

(b + (a%b)) % b




c++