मुझे यह सी ++ मैक्रो मिला और आश्चर्य है कि उनका मतलब कोड% 2 (प्रतिशत चिह्न) से क्या है?सी ++ प्रतिशत चिह्न का क्या अर्थ है?
#define SHUFFLE_STATEMENT_2(code, A, B)
switch (code%2)
{
case 0 : A; B; break;
case 1 : B; A; break;
}
मुझे यह सी ++ मैक्रो मिला और आश्चर्य है कि उनका मतलब कोड% 2 (प्रतिशत चिह्न) से क्या है?सी ++ प्रतिशत चिह्न का क्या अर्थ है?
#define SHUFFLE_STATEMENT_2(code, A, B)
switch (code%2)
{
case 0 : A; B; break;
case 1 : B; A; break;
}
यह एक मॉड्यूलस लेने के लिए है।
असल में, यह शेष का पूर्णांक प्रतिनिधित्व है।
तो, यदि आप 2 से विभाजित हैं तो आपके पास शेष 0 या 1 शेष होगा।
यह संख्याओं के माध्यम से लूप करने का एक अच्छा तरीका है और यदि आप चाहते हैं कि पंक्तियां एक रंग और विषम पंक्तियां हों, तो मॉड्यूलस 2 पंक्तियों की मनमानी संख्या के लिए अच्छी तरह से काम करता है।
इसका मतलब है विभाजन का शेष। आपके मामले में, 2 से विभाजित करें और शेष या तो 0 या 1.
इसका मतलब मॉड्यूलो है। आमतौर पर (x % 2)
अजीब और यहां तक कि संख्याओं का भेदभाव करता है।
मॉड्यूल को थकाता है। यह विभाजन के बाद क्या बचा है:
10/3 देगा 3. - 1 शेष है।
10% 3 यह 1.
मॉड्यूलो विभाजन के बाद छोड़ा गया शेष लौटाता है।
यहाँ इसे प्रयोग रूढ़ अंक इस बात का एक उदाहरण है:: जब आप एक उदाहरण के रूप भी/अजीब/रूढ़ अंक निर्धारित करने का काम सौंपा रहे हैं तो यह उपयोगी है
int main(void)
{ पूर्णांक isPrime = 1; int n;
cout << "Enter n: ";
cin >> n;
for (int i=1; i<=n; i++)
{
for (int j=2; j <= sqrt(static_cast<double>(i)); j++)
{
if(!(i%j))
{
isPrime=0;
break;
}
}
if (isPrime)
cout << i << " is prime" << endl;
isPrime=1;
}
return 0;
}
मामले किसी में देखभाल करने के लिए होता है:% वास्तव में शेष, नहीं मापांक देता है। जब तक संख्या सकारात्मक होती है, तब तक कोई फर्क नहीं पड़ता।
नकारात्मक संख्याओं के लिए हालांकि कोई अंतर हो सकता है। उदाहरण के लिए, -3/2 दो संभावित उत्तर दे सकता है: -1 के शेष -1 के साथ, या -2 के शेष के साथ -2। कम से कम यह सामान्य रूप से मॉड्यूलर अंकगणित में उपयोग किया जाता है, तो मॉड्यूलस हमेशा सकारात्मक होता है, इसलिए पहला नतीजा एक मॉड्यूलस के अनुरूप नहीं है।
सी 8 9/9 0 और सी ++ 98/03 हालांकि या तो उत्तर देने की अनुमति देते हैं, जब तक/और% एक साथ काम करने वाले उत्तर उत्पन्न करते हैं ताकि आप इनपुट को पुन: उत्पन्न कर सकें (यानी -1x2 + -1 -> - 3, -2x2 + 1 = -3)।
मानकों के नए संस्करणों (सी 99, सी 11 और सी ++ 11) के लिए अब कोई विकल्प नहीं है: पूर्णांक विभाजन 0 की ओर गोल होना चाहिए। उदाहरण के लिए -3/2 शेष -1 के साथ देना चाहिए - 1। -3/2 देने -2 के शेष 1 के साथ अब अनुमति नहीं है।
+1। मेरी राय में यह एकमात्र संतोषजनक उत्तर है। मानक equlity (ए/बी) * बी + (एक% बी) = ए का उल्लेख है। इसके अलावा, सी ++ 0 एक्स गारंटी जोड़ देगा कि पूर्णांक विभाजन हमेशा शून्य की ओर गोल करता है। यह -3/2 = 1 और -3% 2 = -1 बनाता है। – sellibitze
+1। और कई बार मैं एक नकारात्मक संख्या के मॉड्यूलस लेना चाहता था, लेकिन यह एक त्वरित गारंटीकृत बग है। यह सी/सी ++ में एक वास्तविक दोष है: बिना किसी झुकाव के संकलन की गारंटी है, और एक मंच पर काम कर सकता है, लेकिन तत्काल (और रहस्यमय) क्रैश जब कहीं और संकलित किया जाता है। – Potatoswatter
यह विभाजन का शेष है। तो 5 2 से विभाजित की तरह है क्योंकि 2 5 2 बार में चला जाता है, लेकिन यह केवल चार के बराबर होती है 1 के एक शेष है, और आपको लगता है कि अंत
5% 2 == 1
नोट पर थोड़ा अतिरिक्त मिला कि विभाजन मूल्य कहीं भी गणना की जाती है नहीं किया जा रहा है, इसलिए यदि आप चाहते थे दोनों विभाजन के पूरे कुल पूर्णांक मान और यह शेष
हैint answer = 5/2;
int remainder = 5 % 2;
cout << "5 divided by 2 is " << answer << " with remainder " << remainder;
शेष कर सकते हैं "5 2 से विभाजित शेष 1 के साथ 2 है" नकारात्मक हो। सी ++ मानक के लिए केवल समानता (ए/बी) * बी + (एक% बी) = ए बी के मामले में = 0 है और पूर्णांक विभाजन को शून्य की ओर गोल करने की अनुमति देता है (सी ++ 0x भी इसकी आवश्यकता है) – sellibitze
हालांकि शेष केवल ऋणात्मक हो अगर लाभांश ऋणात्मक है (या विभाजक, लेकिन वह 2 है)। तो "कोड" के आधार पर, यह कोई समस्या नहीं हो सकती है, और उम्मीद है कि प्रोग्रामर ने सोचा है कि SHUFFLE_STATEMENT_2 मैक्रो का उपयोग कैसे किया जाता है। –