C भाषा अपरेटरको प्राथमिकता र संयोजन नियम | बग रोक्ने उपाय

1. परिचय

C भाषा मा अपरेटरहरूको प्राथमिकता क्रम प्रोग्रामको कार्यलाई सही रूपमा बुझ्न र इच्छित अनुसार नतिजा प्राप्त गर्न महत्त्वपूर्ण छ। विशेष गरी, अपरेटरहरूको मूल्यांकन क्रमलाई गलत बुझेमा, अनिच्छित नतिजा वा बगहरू उत्पन्न हुने सम्भावना बढ्छ। यस लेखमा, C भाषाका प्रमुख अपरेटरहरूको प्राथमिकता क्रम र संयोजन नियमहरूबारे विस्तृत रूपमा व्याख्या गरिनेछ, र विशिष्ट उदाहरणहरू समावेश गरेर त्यसको बुझाइलाई गहिरो बनाइनेछ।

2. अपरेटरको प्रकार र आधारभूत प्रयोग

2.1 अंकगणितीय अपरेटर

अंकगणितीय अपरेटरहरू संख्यात्मक गणना गर्नका लागि आधारभूत अपरेटरहरू हुन्। यी अपरेटरहरू प्रोग्रामभित्र प्रायः प्रयोग गरिन्छन्, त्यसैले आधारभूत कुरा राम्ररी बुझ्नु महत्त्वपूर्ण छ।

  • + (जोड): दुई संख्याहरूलाई जोड्दछ।
  • - (घटाउ): दुई संख्याहरूलाई घटाउँछ।
  • * (गुणन): दुई संख्याहरूलाई गुणा गर्दछ।
  • / (भाग): दुई संख्याहरूलाई भाग गर्दछ (पूर्णांकहरूबीचको भागमा दशमलव भाग काटिन्छ)।
  • % (शेषफल): भागको बाँकी भाग पत्ता लगाउँछ।

उदाहरण:

int a = 10, b = 3;
int sum = a + b;  // 13
int diff = a - b; // 7
int prod = a * b; // 30
int quot = a / b; // 3
int rem = a % b;  // 1

2.2 तुलना अपरेटर

तुलना अपरेटरहरूले दुई मानहरूलाई तुलना गरी नतिजा सत्य (1) वा असत्य (0) को रूपमा फर्काउँछन्। सर्त शाखा र लूपमा प्रायः प्रयोग हुन्छ।

  • > (ठूलो): बायाँपट्टि रहेको मान दायाँपट्टि भन्दा ठूलो भए सत्य।
  • < (सानो): बायाँपट्टि रहेको मान दायाँपट्टि भन्दा सानो भए सत्य।
  • >= (ठूलो वा बराबर): बायाँपट्टि रहेको मान दायाँपट्टि बराबर वा ठूलो भए सत्य।
  • <= (सानो वा बराबर): बायाँपट्टि रहेको मान दायाँपट्टि बराबर वा सानो भए सत्य।
  • == (बराबर): दायाँ-बायाँको मान बराबर भए सत्य।
  • != (बराबर छैन): दायाँ-बायाँको मान फरक भए सत्य।
int a = 5, b = 10;
if (a < b) {
    printf("a b भन्दा सानो छ
");  // प्रदर्शित हुन्छ
}
侍エンジニア塾

3. अपरेटरको प्राथमिकता र संयोजन नियम

3.1 अपरेटरको प्राथमिकता

अपरेटरको प्राथमिकता भनेको बहु अपरेटरहरू समावेश भएको अभिव्यक्तिमा कुन अपरेटर पहिले मूल्यांकन हुन्छ भन्ने निर्धारण हो। तल C भाषा मा अपरेटरको प्राथमिकता सूचीको केही भाग प्रस्तुत गरिएको छ। उच्च प्राथमिकता भएका अपरेटरहरू क्रम अनुसार राखिएका छन्।

प्राथमिकताअपरेटरविवरण
1() [] -> .फङ्क्शन कल, एरे पहुँच, पोइन्टर सदस्य
2++ --पश्च इन्क्रिमेन्ट/डिक्रिमेन्ट
3++ --पूर्व इन्क्रिमेन्ट/डिक्रिमेन्ट, चिन्ह अपरेसन
4* / %गुणन, भाग, बाँकी
5+ -जोड, घट
6<< >>बिट शिफ्ट
7< <= > >=तुलनात्मक अपरेटर
8== !=समानता, असमानता
9&बिट AND
10^बिट XOR
11|बिट OR
12&&तार्किक AND
13||तार्किक OR
14? :शर्तीय अपरेटर
15= += -=असाइन, संयुक्त असाइन
16,कोमा अपरेटर

3.2 संयोजन नियम

संयोजन नियम भनेको समान प्राथमिकता भएका अपरेटरहरू धेरै भएमा, कुन दिशाबाट मूल्यांकन गरिन्छ भन्ने निर्धारण हो। अधिकांश अपरेटरहरू बायाँ संयोजन हुन्, तर केही अपरेटरहरू (जस्तै: असाइन अपरेटर, शर्तीय अपरेटर) दायाँ संयोजन हुन्।

  • बायाँ संयोजन: *, +, - जस्ता अपरेटरहरू बायाँबाट दायाँ मूल्यांकन गरिन्छ।
  • दायाँ संयोजन: असाइन अपरेटर र शर्तीय अपरेटर ? : दायाँबाट बायाँ मूल्यांकन गरिन्छ।
int a = 5, b = 10, c = 15;
int result = a - b + c;  // बायाँ-देखि-उजाँ (a - b) + c = 0

4. विशिष्ट अपरेटरहरूमा प्राथमिकता सम्बन्धी ध्यान दिनुपर्ने बुँदा

4.1 तार्किक अपरेटरहरू

तार्किक AND(&&)र तार्किक OR(||)सर्त अभिव्यक्तिहरूलाई जोड्न प्रयोग गरिन्छ, तर &&को प्राथमिकता ||भन्दा उच्च भएको कारण, तलको जस्तो कोडमा सावधानी आवश्यक छ।

int a = 1, b = 0, c = 1;
if (a && b || c) {
    printf("Truen");  // प्रदर्शित हुन्छ
}

यस उदाहरणमा, a && b पहिले मूल्याङ्कन गरिन्छ, र त्यसको परिणाम c सँग तार्किक OR(||)द्वारा जोडिन्छ। सही क्रममा मूल्याङ्कन गर्नको लागि, कोष्ठकहरू प्रयोग गरेर स्पष्ट रूपमा क्रम निर्दिष्ट गर्नुहोस्।

if ((a && b) || c) {
    // अधिक स्पष्ट मूल्याङ्कन
}

4.2 बिट अपरेटरहरू

बिट अपरेटरहरू(&, |, ^)बिट स्तरमा कार्य गर्छन्, तर तिनीहरूको प्राथमिकता अंकगणितीय वा तुलना अपरेटरहरूभन्दा कम हुन्छ, त्यसैले अभिव्यक्तिहरू जटिल हुँदा सावधानी आवश्यक छ।

int x = 5;  // 0101
int y = 3;  // 0011
int result = x & y;  // 0001 (बिट गुणन)

5. वास्तविक प्रोग्राम उदाहरण

अभिकर्ता को प्राथमिकता क्रमलाई गलत बुझ्न सजिलो हुने प्रोग्राम उदाहरण प्रस्तुत गर्दछौं। अगामी उदाहरणमा、||&& को मूल्यांकन क्रम प्रायः भ्रमित हुन्छ।

#include <stdio.h>
int main() {
    int a = 0, b = 1;
    if (a == 0 || a == 1 && b == 0) {
        printf("Truen");  // प्रदर्शित हुन्छ
    }
    return 0;
}

यस उदाहरणमा、a == 1 && b == 0 पहिले मूल्यांकन हुन्छ, तर अनपेक्षित परिणाम आउन सक्छ। सही परिणाम पाउनको लागि, कोष्ठक प्रयोग गरेर मूल्यांकन क्रम स्पष्ट गर्नुहोस्।

if ((a == 0 || a == 1) && b == 0) {
    printf("Truen");
}

6. निष्कर्ष

C भाषा मा अपरेटरहरूको प्राथमिकता क्रम प्रोग्रामको सही कार्यका लागि अनिवार्य छ। जटिल अभिव्यक्तिहरूलाई ह्यान्डल गर्दा, प्राथमिकता क्रम र संयोजन नियमहरू बुझेर, कोष्ठकहरूलाई उपयुक्त रूपमा प्रयोग गरेर क्रम स्पष्ट गर्दा, अनपेक्षित बगहरू रोक्न सकिन्छ। अपरेटरहरूको प्राथमिकता क्रममा ध्यान दिएर, अझ सुरक्षित र प्रभावकारी प्रोग्रामिङ सम्भव हुनेछ।

年収訴求