C भाषाको तार्किक अपरेटर: मूलभूत, प्रयोग र शर्त/लूप उदाहरण

目次

1. परिचय

C भाषा धेरै प्रोग्रामिङ भाषा को आधार हुने सरल र शक्तिशाली भाषा हो। यसमा “तार्किक अपरेटर” शर्त जाँच वा दोहोर्याउने प्रक्रिया जस्ता विभिन्न परिस्थितिहरूमा प्रयोग हुने महत्वपूर्ण तत्व हो। तार्किक अपरेटरलाई सही रूपमा बुझेर, जटिल प्रोग्रामको सर्त शाखा सजिलै निर्माण गर्न सकिन्छ, र कोडको कार्यक्षमता पनि उल्लेखनीय रूपमा सुधारिन्छ।

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

आगामी सिकाइ सामग्री मार्फत, C भाषाका तार्किक अपरेटरहरूको ज्ञानलाई गहिरो बनाइ, वास्तविक प्रोग्राममा उपयोगी सीप हासिल गरौं।

2. तार्किक अपरेटरहरू (C भाषा मा आधारभूत ज्ञान)

C भाषा मा तार्किक अपरेटरहरू मुख्यतया सर्त वाक्यहरू र लूपहरूमा सर्तको सत्यता/असत्यता मूल्यांकन गर्न प्रयोग गरिन्छ। तार्किक अपरेटरहरूले सर्त “साँचो (True)” वा “झूठो (False)” हो कि छैन जाँच गर्छन् र त्यस अनुसार प्रक्रिया सञ्चालन गर्छन्। तार्किक अपरेटरहरू प्रयोग गरेर, बहु सर्तहरूलाई संयोजन गर्न वा सर्तलाई उल्टाउन सकिन्छ, जसले कार्यक्रमको लचिलोपन बढाउँछ।

तार्किक अपरेटरहरूको भूमिका र प्रयोग

तार्किक अपरेटरहरू मुख्यतया तलका 3 प्रकारका छन्, र प्रत्येकलाई विभिन्न प्रयोजनका लागि प्रयोग गरिन्छ।

  1. तार्किक AND अपरेटर: &&
  • जब दुई सर्तहरू “साँचो” हुन्छन्, तब “साँचो” को रूपमा मूल्यांकन गरिन्छ। केवल दुवै सर्तहरू पूरा भएमा मात्र, अर्को प्रक्रियामा जान प्रयोग गरिन्छ।
  1. तार्किक OR अपरेटर: ||
  • जब कुनै पनि सर्त “साँचो” हुन्छ, तब “साँचो” को रूपमा मूल्यांकन गरिन्छ। कुनै एक सर्त पूरा भएमा प्रक्रिया अगाडि बढाउन चाहिँदा प्रयोग गरिन्छ।
  1. तार्किक NOT अपरेटर: !
  • सर्तको सत्यता उल्ट्याउँछ। सर्त “साँचो” भएमा “झूठो” को रूपमा मूल्यांकन गरिन्छ, र उल्टो रूपमा “झूठो” भएमा “साँचो” को रूपमा लिइन्छ।

तार्किक अपरेटरहरूलाई C भाषाको if वाक्य वा while लूप जस्ता सर्त अभिव्यक्तिहरूमा समावेश गरेर, कार्यक्रमको व्यवहारलाई नियन्त्रण गर्ने शक्ति प्रदान गर्छ। यस्ता अपरेटरहरूलाई प्रभावकारी रूपमा प्रयोग गर्दा, सर्त शाखाहरूको प्रयोग गरेर जटिल कार्यक्रमहरूलाई संक्षिप्त रूपमा व्यक्त गर्न सकिन्छ।

तार्किक अपरेटरहरूको आधारभूत लेखन शैली

तार्किक अपरेटरहरू सामान्यतया तलको जस्तै लेखिन्छ।

if (condition1 && condition2) {
    // condition1 र condition2 दुवै सत्य भएमा प्रक्रिया
}

if (condition1 || condition2) {
    // condition1 अथवा condition2 सत्य भएमा प्रक्रिया
}

if (!condition) {
    // condition असत्य भएमा प्रक्रिया
}

तार्किक अपरेटरहरूको प्रयोग दृश्य

तार्किक अपरेटरहरू सर्तहरूको संयोजन जटिल हुँदा विशेष गरी उपयोगी हुन्छन्। उदाहरणका लागि, उमेर 20 वर्ष वा बढी र उचाइ 160 सेमी वा बढी भएका व्यक्तिहरूलाई मात्र लक्षित गर्ने प्रक्रिया गर्न चाहँदा, AND अपरेटर प्रयोग गरेर दुई सर्तहरूलाई एकै साथ मूल्यांकन गर्न सकिन्छ।

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

侍エンジニア塾

3. सी भाषाको मुख्य तर्कसंगत अपरेटरहरू र तिनीहरूको प्रयोग

सी भाषामा प्रायः प्रयोग हुने तर्कसंगत अपरेटरहरूमा、तर्कसङ्कलन(AND)、तर्कसम्पूर्ण(OR)、तर्कनकार(NOT)का तीनवटा छन्、जसलाई विभिन्न सर्तहरूको मूल्याङ्कनमा प्रयोग गरिन्छ। यहाँ、प्रत्येक तर्कसंगत अपरेटरको प्रयोग र विशिष्ट उदाहरणहरूलाई विस्तृत रूपमा हेर्नेछौं।

3.1 तर्कसङ्कलन(AND)अपरेटर:&&

तर्कसङ्कलन अपरेटर(&&)ले, दुईवटा सर्त दुवै “साँचो” भएमा “साँचो” फिर्ता गर्छ। दुवै सर्तहरू पूरा भएको बेला मात्र प्रक्रिया चलाउन उपयोगी हुन्छ।

उदाहरण प्रयोग

#include <stdio.h>

int main() {
    int age = 25;
    int height = 170;

    if (age >= 20 && height >= 160) {
        printf("शर्त मिल्यो。\n");
    } else {
        printf("शर्त मिलेन。\n");
    }
    return 0;
}

व्याख्या
यो कोडमा, उमेर 20 वर्ष वा बढी र उचाइ 160cm वा बढी भएमा सर्त पूरा हुन्छ, “शर्तसँग मिल्यो” देखाइन्छ। कुनै पनि सर्त पूरा नभएमा “शर्तसँग मिलेन” देखाइन्छ।

3.2 तर्कसम्पूर्ण(OR)अपरेटर:||

तर्कसम्पूर्ण अपरेटर(||)ले, कुनै एक सर्त “साँचो” भएमा “साँचो” फिर्ता गर्छ। कुनै एक सर्त पूरा भएमा प्रक्रिया चलाउन उपयुक्त हुन्छ।

उदाहरण प्रयोग

#include <stdio.h>

int main() {
    int age = 18;
    int student = 1; // 1 ले 'विद्यार्थी' को संकेत गर्दछ

    if (age >= 20 || student == 1) {
        printf("छूट लागू हुनेछ。
");
    } else {
        printf("छूट लागू हुने छैन。
");
    }
    return 0;
}

व्याख्या
यो कोडमा, उमेर 20 वर्ष वा बढी वा विद्यार्थी भएमा “छूट लागू हुन्छ” देखाइन्छ। उमेर 20 वर्ष भन्दा कम र विद्यार्थी नभएमा “छूट लागू हुँदैन” देखाइन्छ।

3.3 तर्कनकार(NOT)अपरेटर:!

तर्कनकार अपरेटर(!)ले, सर्तको सत्यता उल्ट्याउने भूमिका हुन्छ। विशेष गरी, सर्त “साँचो” भएमा “झूठो” मा, सर्त “झूठो” भएमा “साँचो” मा मूल्याङ्कन हुन्छ। सर्त पूरा नभएमा विशेष प्रक्रिया गर्न चाहँदा उपयोगी हुन्छ।

उदाहरण प्रयोग

#include <stdio.h>

int main() {
    int registered = 0; // 0 ले 「अभिलेखित नभएको」 जनाउँछ

    if (!registered) {
        printf("अभिलेखित नभएको प्रयोगकर्ता हो。\n");
    } else {
        printf("अभिलेखित भएको प्रयोगकर्ता हो。\n");
    }
    return 0;
}

व्याख्या
यो कोडमा, “अदर्तित” अर्थ गर्ने registered 0 भएको कारण, तर्कनकार अपरेटर ! द्वारा सर्त “साँचो” मा मूल्याङ्कन हुन्छ, र “अदर्तित प्रयोगकर्ता हो” देखाइन्छ। यदि registered 1 (दर्तित) भएमा, “दर्तित प्रयोगकर्ता हो” देखाइन्छ।

3.4 तर्कसंगत अपरेटरको प्रयोग उदाहरण सारांश

तर्कसंगत अपरेटरहरू सर्तहरूको संयोजन प्रयोग गर्दा अत्यन्त उपयोगी हुन्छन्। जटिल सर्तहरूलाई संक्षिप्त रूपमा व्यक्त गर्न सकिन्छ, र कोडको पढ्न सजिलोपन पनि बढ्छ। साथै, तर्कसङ्कलन, तर्कसम्पूर्ण, तर्कनकारका तीनवटा अपरेटरहरूलाई संयोजन गरेर प्रयोग गर्न सकिन्छ।

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

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

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

C भाषा मा तार्किक अपरेटरहरूको प्राथमिकता तलको जस्तै हुन्छ (उच्चतमबाट तलसम्म)।

  1. तार्किक नकार(NOT)अपरेटर:!
  2. तार्किक गुणन(AND)अपरेटर:&&
  3. तार्किक योग(OR)अपरेटर:||

यसले गर्दा, सर्त अभिव्यक्तिमा धेरै तार्किक अपरेटरहरू प्रयोग भएको अवस्थामा, !&&|| को क्रममा मूल्यांकन हुन्छ।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 0;
    int c = 1;

    if (!a || b && c) {
        printf("शर्तलाई सत्यको रूपमा मूल्याङ्कन गरियो。\n");
    } else {
        printf("शर्तलाई असत्यको रूपमा मूल्याङ्कन गरियो。\n");
    }
    return 0;
}

व्याख्या
यो उदाहरणमा, !a पहिलो मूल्यांकन हुन्छ (a 1 भएकोले !a 0 हुन्छ)। त्यसपछि b && c मूल्यांकन हुन्छ, र b 0 भएकोले b && c 0 हुन्छ। अन्तमा, 0 || 0 मूल्यांकन गरिएपछि सर्त “झूठो” बनिन्छ, र “सर्त झूठो रूपमा मूल्यांकन गरिएको” देखाइन्छ।

4.2 संयोजन नियम

तार्किक अपरेटरहरूको संयोजन नियम तलको जस्तै छन्।

  • तार्किक नकार(NOT)अपरेटर: ! दायाँबाट बायाँको संयोजनता हुन्छ।
  • तार्किक गुणन(AND)अपरेटर: && बायाँबाट दायाँको संयोजनता हुन्छ।
  • तार्किक योग(OR)अपरेटर: || पनि बायाँबाट दायाँको संयोजनता हुन्छ।

संयोजन नियमले, समान प्राथमिकताको अपरेटरहरू क्रमागत भएमा, मूल्यांकन बायाँबाट दायाँको क्रममा गरिन्छ।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 1;
    int c = 0;

    if (a && b || c) {
        printf("शर्तलाई सत्यको रूपमा मूल्याङ्कन गरियो。\n");
    } else {
        printf("शर्तलाई असत्यको रूपमा मूल्याङ्कन गरियो。\n");
    }
    return 0;
}

व्याख्या
यस अवस्थामा, a && b पहिले मूल्यांकन हुन्छ, दुवै 1 (साँचो) भएकोले a && b 1 हुन्छ। त्यसपछि, 1 || c मूल्यांकन हुन्छ, र c 0 (झूठो) भएता पनि || अपरेटरले सर्तलाई “साँचो” रूपमा मूल्यांकन गर्छ, र “सर्त साँचो रूपमा मूल्यांकन गरिएको” देखाइन्छ।

4.3 अपरेटरको प्राथमिकता र संयोजन नियम प्रयोग गरेर सही मूल्यांकन

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

उदाहरण:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 0;
    int c = 1;

    if ((a || b) && c) {
        printf("शर्तलाई सत्यको रूपमा मूल्याङ्कन गरियो。\n");
    } else {
        printf("शर्तलाई असत्यको रूपमा मूल्याङ्कन गरियो。\n");
    }
    return 0;
}

व्याख्या
यो कोडले, कोष्ठक प्रयोग गरेर मूल्यांकन क्रम स्पष्ट गरेको छ। a || b पहिले मूल्यांकन हुन्छ, a 1 भएकोले a || b 1 हुन्छ। त्यसपछि, 1 && c मूल्यांकन हुन्छ, र c 1 भएकोले, सम्पूर्ण

4.4 अपरेटर प्राथमिकता सम्बन्धी बुँदाहरू

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

5. विशिष्ट प्रयोग उदाहरणहरू: सर्त विभाजन र लूपमा तार्किक अपरेटरको प्रयोग

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

5.1 तार्किक अपरेटर प्रयोग गरेर सर्त विभाजन (if कथन)

if कथनमा तार्किक अपरेटर प्रयोग गरेर, बहु सर्तहरूलाई संयोजन गरी सर्त विभाजन गर्न सम्भव हुन्छ। उदाहरणका लागि, प्रयोगकर्ताेर सर्त र दुवै पूरा गरेको छ कि छैन जाँच गर्दा AND अपरेटर प्रयोग गर्न सकिन्छ।

उदाहरण

#include <stdio.h>

int main() {
    int age = 22;
    int is_member = 1; // 1 ले 「सदस्य हुनु」 लाई जनाउँछ

    if (age >= 18 && is_member == 1) {
        printf("सेवा प्रयोग गर्न सकिन्छ。
");
    } else {
        printf("सेवा प्रयोग गर्न सकिँदैन。
");
    }
    return 0;
}

व्याख्या
यो कोडले, उमेर १८ वर्ष वा सोभन्दा माथि र सदस्य भएको अवस्थामा सेवा प्रयोग गर्न सकिन्छ भनी निर्धारण गर्दछ। दुवै सर्तहरू पूरा भएमा मात्र “सेवा प्रयोग गर्न सकिन्छ।” देखाइन्छ। कुनै एक सर्त पनि पूरा नभएमा “सेवा प्रयोग गर्न सकिँदैन।” देखाइन्छ।

5.2 तार्किक अपरेटर प्रयोग गरेर सर्त विभाजन (if-else कथन)

OR अपरेटर प्रयोग गरेर, कुनै एक सर्त पूरा भएको छ कि छैन जाँच गर्न सकिन्छ। उदाहरणका लागि, छुट लागू गर्ने सर्त “उमेर ६५ वर्ष वा सोभन्दा माथि” वा “विद्यार्थी” भएको अवस्थामा, ती सर्तहरूलाई संयोजन गर्न सकिन्छ।

उदाहरण

#include <stdio.h>

int main() {
    int age = 20;
    int is_student = 1; // 1 ले 'विद्यार्थी' जनाउँछ

    if (age >= 65 || is_student == 1) {
        printf("छूट लागू हुन्छ।\n");
    } else {
        printf("छूट लागू हुँदैन।\n");
    }
    return 0;
}

व्याख्या
यो कोडले, उमेर ६५ वर्ष वा सोभन्दा माथि वा विद्यार्थी भएको अवस्थामा छुट लागू हुन्छ भनी निर्धारण गर्दछ। कुनै एक सर्त पूरा भएमा “छुट लागू हुन्छ।” देखाइन्छ, र दुवै सर्त पूरा नभएमा “छुट लागू हुँदैन।” देखाइन्छ।

5.3 तार्किक अपरेटर प्रयोग गरेर लूप सर्त (while लूप)

लूपमा, सर्त “साँचो” रहँदा लूप जारी रहन्छ। तार्किक अपरेटर प्रयोग गरेर, बहु सर्तहरू एकै साथ पूरा भएमा वा कुनै एक सर्त पूरा भएमा लूपलाई नियन्त्रण गर्न सकिन्छ।

उदाहरण

#include <stdio.h>

int main() {
    int count = 0;
    int limit = 5;

    while (count < limit && count != 3) {
        printf("गणना: %d
", count);
        count++;
    }
    printf("लूप समाप्त।
");
    return 0;
}

व्याख्या
यो कोडमा, count limit भन्दा कम र count ३ होइन भने लूप जारी रहन्छ। लूपभित्र, count को मान प्रत्येक पटक वृद्धि हुन्छ, र count ३ भए वा ५ वा सोभन्दा माथि भएमा लूप समाप्त हुन्छ र "लूप समाप्त।" देखाइन्छ। यसरी AND अपरेटर प्रयोग गरेर, दुई सर्तहरू एकै साथ पूरा नभएसम्म लूप जारी राख्न सकिन्छ।

5.4 संयोजित तार्किक अपरेटर प्रयोग गरेर जटिल सर्त सेटिङ

बहु तार्किक अपरेटरहरूलाई संयोजन गरेर, जटिल सर्त अभिव्यक्तिहरू बनाउन पनि सम्भव हुन्छ। उदाहरणका लागि, निश्चित सर्त पूरा भएमा मात्र निश्चित कार्यलाई कार्यान्वयन गर्न चाहनुहुन्छ भने, तार्किक अपरेटरलाई प्रभावकारी रूपमा प्रयोग गर्न सकिन्छ।

उदाहरण

#include <stdio.h>

int main() {
    int age = 30;
    int income = 500000;
    int is_member = 1;

    if ((age > 25 && income >= 300000) || is_member == 1) {
        printf("लाभहरू लागू हुन्छन्。
");
    } else {
        printf("लाभहरू लागू हुँदैनन्。
");
    }
    return 0;
}

व्याख्या
यो कोडमा, उमेर २५ वर्ष वा सोभन्दा माथि र आय 300,000 येन वा सोभन्दा माथि भएमा, सदस्य भएको अवस्थामा “विशेष लाभ लागू हुन्छ।” देखाइन्छ। यस AND र OR अपरेटरलाई संयोजन गरेर, बहु सर्तहरूलाई लचिलो रूपमा सेट गर्न सकिन्छ।

5.5 सर्त विभाजन र लूपमा तार्किक अपरेटरको प्रयोगको सारांश

तार्किक अपरेटरहरू if कथन र while लूपमा बहु सर्तहरू सेट गरेर, कार्यक्रमको प्रवाहलाई लचिलो रूपमा नियन्त्रण गर्न अत्यन्त प्रभावकारी छन्। बहु सर्तहरूलाई संयोजन गरेर, सर्त विभाजनलाई विविध बनाइन्छ, र जटिल सर्तहरू अनुसार प्रक्रिया गर्न सम्भव हुन्छ। तार्किक अपरेटरलाई प्रभावकारी रूपमा प्रयोग गरेर, अझ प्रभावी र बुझ्न सजिलो कोड लेख्न सकिन्छ

6. तार्किक अपरेटर र बिट अपरेटरको भिन्नता

C भाषा मा, तार्किक अपरेटर र बिट अपरेटर दुवै छन्, र दुवै समान प्रतीक प्रयोग गर्छन्, तर तिनीहरूको कार्य र प्रयोगमा ठूलो भिन्नता छ। शुरुआतीहरूका लागि, विशेष गरी&&&, |||लाई भ्रमित गर्न सजिलो हुन्छ, त्यसैले प्रत्येकको भिन्नता बुझेर सही रूपमा प्रयोग गर्नु महत्त्वपूर्ण छ। यस खण्डमा, तार्किक अपरेटर र बिट अपरेटरको भिन्नता व्याख्या गरिनेछ, र भ्रम टाल्नका लागि बुँदाहरू पनि प्रस्तुत गरिनेछ।

6.1 तार्किक अपरेटर र बिट अपरेटरको मूलभूत भिन्नता

तार्किक अपरेटर र बिट अपरेटरको भिन्नता सारांश गर्दा, तलको जस्तै हुन्छ।

  • तार्किक अपरेटर(&&||!
    तार्किक अपरेटरले शर्त अभिव्यक्तिको 「साँचो」(True) वा 「झूठो」(False) मूल्यांकन गर्छ। सामान्यतया, शर्त विभाजन वा लूपको शर्त सेटिङमा प्रयोग गरिन्छ, र बहु शर्तहरूलाई संयोजन गरेर निर्णय गर्न प्रयोग गरिन्छ।
  • बिट अपरेटर(&|~^ आदि)
    बिट अपरेटरले पूर्णांकको बिट-प्रति-बिट अपरेसन गर्छ। बिट अपरेसनलाई बिट स्तरमा संख्यालाई सञ्चालन गर्न चाहँदा, वा मास्क प्रक्रिया जस्ता निम्न-स्तरको अपरेसन गर्न चाहँदा प्रयोग गरिन्छ।

6.2 तार्किक AND अपरेटर र बिट AND अपरेटरको भिन्नता

  • तार्किक AND अपरेटर &&
    दुई शर्तहरू दुवै 「साँचो」 भएमा 「साँचो」 को रूपमा मूल्यांकन हुन्छ। if वा while को शर्तको रूपमा प्रयोग गर्दा, शर्तको सत्यता वा असत्यता जाँच गर्न प्रयोग गरिन्छ।
  • बिट AND अपरेटर &
    दुई पूर्णांकको बिट-प्रति-बिट AND अपरेसन गरिन्छ, जहाँ दुवै बिट 1 भएको स्थान मात्र 1 हुन्छ। बिट अपरेसनको लागि प्रयोग गरिन्छ, जसले शर्तको सत्यता/असत्यता भन्दा फरक परिणाम दिन्छ।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 6;  // 6 दुई-आधारमा 0110 हो
    int b = 3;  // 3 दुई-आधारमा 0011 हो

    if (a && b) {
        printf("तर्कसंगत AND: शर्त सत्य छ。\n");
    }

    int result = a & b;
    printf("बिट AND को परिणाम: %d\n", result); // परिणाम 2 (दुई-आधारमा 0010) हो
    return 0;
}

व्याख्या
यस उदाहरणमा, a && b दुवै चलहरू शून्य नभएँ भने 「साँचो」 को रूपमा मूल्यांकन हुन्छ, र 「तार्किक AND: शर्त साँचो छ。」 देखाइन्छ। अर्कोतर्फ, a & b बिट-प्रति-बिट AND अपरेसन गर्ने कारणले, परिणाम 2 (द्विआधारीमा 0010) हुन्छ। यसरी, &&& समान देखिए पनि, प्रक्रिया बिचको भिन्नता ध्यान दिनु आवश्यक छ।

6.3 तार्किक OR अपरेटर र बिट OR अपरेटरको भिन्नता

  • तार्किक OR अपरेटर ||
    कुनै एक शर्त 「साँचो」 भएमा 「साँचो」 को रूपमा मूल्यांकन हुन्छ। सामान्यतया, शर्त विभाजनमा शर्त संयोजनको लागि प्रयोग गरिन्छ।
  • बिट OR अपरेटर |
    दुई पूर्णांकको बिट-प्रति-बिट OR अपरेसन गरिन्छ, जहाँ कुनै पनि बिट 1 भएमा 1 हुन्छ। बिट-स्तरको अपरेसनमा प्रयोग गरिन्छ।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 6;  // 6 द्विआधारीमा 0110 हो
    int b = 3;  // 3 द्विआधारीमा 0011 हो

    if (a || b) {
        printf("तर्क OR: शर्त सत्य छ。\n");
    }

    int result = a | b;
    printf("बिट OR का परिणाम: %d\n", result); // परिणाम 7 (द्विआधारीमा 0111)
    return 0;
}

व्याख्या
यस उदाहरणमा, a || b कम्तिमा एउटा चल शून्य नभएँ भने 「साँचो」 को रूपमा मूल्यांकन हुन्छ, र 「तार्किक OR: शर्त साँचो छ。」 देखाइन्छ। अर्कोतर्फ, a | b बिट-प्रति-बिट OR अपरेसन गर्ने कारणले, परिणाम 7 (द्विआधारीमा 0111) हुन्छ। यसरी, ||| को अर्थ फरक हुन्छ, त्यसैले प्रयोगमा ध्यान दिनु आवश्यक छ।

6.4 बिट अपरेटरको प्रयोग दृश्यहरू

बिट अपरेटरलाई निम्न-स्तरको प्रोग्रामिङ वा कार्यक्षमता आवश्यक पर्ने परिस्थितिहरूमा प्राय प्रयोग गरिन्छ। उदाहरणका लागि, डेटा को केही भाग मात्र प्राप्त गर्न, वा फ्ल्याग व्यवस्थापनमा बहु अवस्थाहरूलाई एक चलमा व्यवस्थापन गर्न आवश्यक पर्दा उपयोगी हुन्छ।

उदाहरण: मास्क प्रक्रिया

#include <stdio.h>

int main() {
    int flags = 0b1010;   // द्विनारी 1010
    int mask = 0b0010;    // द्विनारी 0010

    int result = flags & mask;
    if (result) {
        printf("विशिष्ट बिटहरू सक्रिय छन्।\n");
    } else {
        printf("बिटहरू सक्रिय छैनन्।\n");
    }
    return 0;
}

यस कोडमा, flags चलको विशेष बिट(यहाँ दोस्रो बिट) सेट भएको छ कि छैन जाँच गर्न बिट AND अपरेटर प्रयोग गरिएको छ। यस्तो मास्क प्रक्रिया डेटा व्यवस्थापन र फ्ल्याग जाँचमा अत्यन्त उपयोगी हुन्छ।

6.5 तार्किक अपरेटर र बिट अपरेटरलाई भ्रम नपर्नका लागि बुँदाहरू

  • &&|| शर्त वाक्यहरूमा प्रयोग गरिन्छ, सत्यता जाँच गर्न। अर्कोतर्फ, &| संख्याको बिट-प्रति-बिट अपरेसनका लागि प्रयोग गरिन्छ, त्यसैले फरक प्रयोगको रूपमा स्पष्ट रूपमा छुट्याउनुपर्छ।
  • शर्त विभाजनमा बिट अपरेटर प्रयोग गर्दा, अनपेक्षित परिणाम प्राप्त हुन सक्छ, त्यसैले सधैं तार्किक अपरेटर र बिट अपरेटरको भिन्नता ध्यानमा राखी प्रयोग गरौं।

7. सामान्य त्रुटिहरू र ध्यान दिनु पर्ने बुँदा

C भाषा को तर्कीय अपरेटर सर्त निर्णयको लागि उपयोगी उपकरण हो, तर दुरुपयोग वा बुझाइको कमीले अनपेक्षित व्यवहार उत्पन्न गर्न सक्छ। यहाँ, तर्कीय अपरेटरको प्रयोगमा सामान्य त्रुटिहरू र तिनीहरूलाई टार्नका लागि ध्यान दिनु पर्ने बुँदाहरूको व्याख्या गरिएको छ।

7.1 तर्कीय अपरेटर र बिट अपरेटरको भ्रम

सबैभन्दा सामान्य त्रुटिहरूमध्ये एक हो तर्कीय अपरेटर र बिट अपरेटरलाई भ्रमित गर्नु। उदाहरणका लागि, && (तर्कीय AND) र & (बिट AND), || (तर्कीय OR) र | (बिट OR) लाई गलत रूपमा प्रयोग गर्दा, सर्त मूल्यांकन अपेक्षित रूपमा काम गर्दैन।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 1; // साँचो
    int b = 0; // झूठ

    // गलत प्रयोग: & लाई && को रूपमा प्रयोग गर्नुपर्छ
    if (a & b) {
        printf("शर्त साँचो छ。
");
    } else {
        printf("शर्त झूठ छ。
");
    }
    return 0;
}

व्याख्या
यस उदाहरणमा, a & b लाई बिट AND अपरेटरको रूपमा मूल्यांकन गरिन्छ, जसले इच्छित परिणाम प्राप्त हुँदैन। यस अवस्थामा && प्रयोग गर्नु आवश्यक छ, र if (a && b) लेखेर सर्तलाई सही रूपमा मूल्यांकन गर्न सकिन्छ। सर्त वाक्यमा तर्कीय अपरेटर प्रयोग गर्नुहोस्, र बिट-स्तरको प्रक्रिया लागि बिट अपरेटर प्रयोग गर्ने कुरा ध्यानमा राख्नुहोस्।

7.2 सर्त वाक्यमा असाइनमेंट अपरेटर (=) को दुरुपयोग

सर्त अभिव्यक्तिमा, तुलना अपरेटर == र असाइनमेंट अपरेटर = लाई गल्तीले प्रयोग गर्नु सामान्य त्रुटि हो। यस अवस्थामा, अनजानेमा भेरिएबलमा मान असाइन गरिन्छ, जसले सर्तको मूल्यांकन सधैं “साँचो” बनाउँछ।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 5;

    // गलत प्रयोग: जहाँ == हुनु पर्छ, त्यहाँ = प्रयोग गरिएको छ
    if (a = 0) {
        printf("a 0 छ。\n");
    } else {
        printf("a 0 छैन。\n");
    }
    return 0;
}

व्याख्या
यस कोडमा, a = 0 द्वारा भेरिएबल a मा 0 असाइन गरिन्छ, र त्यसको परिणाम मूल्यांकन गरिन्छ, जसले सर्तलाई “झूठ” बनाउँछ र “a 0 होइन” देखाइन्छ। इच्छित रूपमा तुलना गर्न चाहनुहुन्छ भने, if (a == 0) लेखेर तुलना अपरेटर प्रयोग गर्नुहोस्।

7.3 सर्त अभिव्यक्तिको प्राथमिकता नबिचार्ने लेखन

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

उदाहरण:

#include <stdio.h>

int main() {
    int x = 5;
    int y = 0;
    int z = 10;

    // प्राथमिकता क्रममा ध्यान दिनु आवश्यक छ
    if (x > 3 || y && z > 5) {
        printf("शर्त सत्य छ。\n");
    } else {
        printf("शर्त असत्य छ。\n");
    }
    return 0;
}

व्याख्या
यस कोडमा, ||&& को प्राथमिकताका कारण, y && z > 5 पहिले मूल्यांकन हुन्छ। इच्छित परिणाम पाउनको लागि, सर्तलाई कोष्ठक () मा स्पष्ट रूपमा राखेर, if ((x > 3 || y) && z > 5) जस्तै लेख्नाले प्राथमिकता स्पष्ट हुन्छ। जटिल सर्त अभिव्यक्तिहरूमा कोष्ठक प्रयोग गरी इच्छित मूल्यांकन क्रम निर्दिष्ट गर्ने बानी बनाउनुहोस्।

7.4 छोटो-सर्किट मूल्यांकनको अभाव

तर्कीय अपरेटर &&|| सँग “छोटो-सर्किट मूल्यांकन” नामक विशेषता हुन्छ। यसले सर्त अभिव्यक्तिको मूल्यांकन प्रारम्भिक रूपमा समाप्त हुन्छ। छोटो-सर्किट मूल्यांकन नबुझिएमा, विशेष गरी साइड इफेक्टसहितको अभिव्यक्ति प्रयोग गर्दा, अनपेक्षित व्यवहार उत्पन्न हुन सक्छ।

  • &&: यदि पहिलो सर्त “झूठ” हो भने, पछिल्लो सर्तहरू मूल्यांकन हुँदैन।
  • ||: यदि पहिलो सर्त “साँचो” हो भने, पछिल्लो सर्तहरू मूल्यांकन हुँदैन।

उदाहरण:

#include <stdio.h>

int main() {
    int a = 0;
    int b = 5;

    if (a && (b++ > 0)) {
        printf("शर्त सत्य छ。 
");
    } else {
        printf("शर्त असत्य छ。 
");
    }
    printf("b को मान: %d
", b);
    return 0;
}

व्याख्या
यस उदाहरणमा, a 0 (झूठ) भएको कारण छोटो-सर्किट मूल्यांकनले b++ > 0 लाई मूल्यांकन गर्दैन। त्यसैले b को मान परिवर्तन हुँदैन, अन्तमा “सर्त झूठ हो” देखाइन्छ, र b को मान 5 नै रहन्छ। छोटो-सर्किट मूल्यांकन हुने कुरा बुझेर, सर्त अभिव्यक्तिमा साइड इफेक्टसहितको प्रक्रिया समावेश गर्दा सावधान रहनुहोस्।

7.5 सामान्य त्रुटिहरू र ध्यान दिनु पर्ने बुँदाहरूको सारांश

  • तर्कीय अपरेटर र बिट अपरेटरलाई भ्रमित नगर्नु
    &&&, ||| को भिन्नता बुझेर, इच्छित रूपमा प्रयोग गर्नु महत्त्वपूर्ण छ।
  • असाइनमेंट अपरेटर र तुलना अपरेटरलाई भ्रमित नगर्नु
    === पूर्ण रूपमा फरक अर्थ राख्दछन्, त्यसैले सर्त अभिव्यक्तिमा लेखन गर्दा ध्यान दिनुहोस्।
  • प्राथमिकता र कोष्ठकको प्रयोग
    जटिल सर्त अभिव्यक्तिहरूमा, कोष्ठक प्रयोग गरी इच्छित मूल्यांकन क्रम स्पष्ट पार्नुहोस्।
  • छोटो-सर्किट मूल्यांकनको बुझाइ
    छोटो-सर्किट मूल्यांकन हुने सर्त अभिव्यक्तिहरूमा, मूल्यांकन नहुनु हुने अभिव्यक्तिहरूको सम्भावना विचार गरी लेखन गर्नु महत्त्वपूर्ण छ।

8. FAQ: तार्किक अपरेटरहरू सम्बन्धी अक्सर सोधिने प्रश्नहरू

तार्किक अपरेटरहरू बारेमा शुरुआतीहरूबाट अक्सर प्रश्नहरू आउँछन्। यहाँ हामी C भाषामा तार्किक अपरेटरहरू सम्बन्धी सामान्य शंकाहरूको उत्तर दिन्छौं र थप बुझाइलाई गहिरो बनाउने बुँदाहरू व्याख्या गर्छौं।

Q1. C भाषामा तार्किक अपरेटर प्रयोग गरेर बहु शर्तहरू कसरी संयोजन गर्ने?

A: C भाषामा, &&(AND) र ||(OR) जस्ता तार्किक अपरेटरहरू प्रयोग गरेर बहु शर्तहरू संयोजन गर्न सम्भव छ। उदाहरणका लागि, उमेर र स्थितीले निश्चित शर्तहरू पूरा गर्दा मात्र प्रक्रिया कार्यान्वयन गर्न प्रयोग गरिन्छ।

उदाहरण:

#include <stdio.h>

int main() {
    int age = 20;
    int is_student = 1;

    if (age >= 18 && is_student == 1) {
        printf("शर्त पूरा भएको छ。
");
    } else {
        printf("शर्त पूरा भएको छैन。
");
    }
    return 0;
}

यो कोडमा, उमेर १८ वर्ष वा सोभन्दा बढी र विद्यार्थी भएको अवस्थामा शर्त साँचो हुन्छ र “शर्त पूरा भयो” देखाइन्छ। बहु शर्तहरू सेट गर्दा, आवश्यक शर्तहरूलाई AND र OR अपरेटरहरू प्रयोग गरेर संयोजन गर्नु प्रभावकारी हुन्छ।

Q2. तार्किक अपरेटर र बिट अपरेटरको भिन्नता सरल रूपमा व्याख्या गर्नुहोस्।

A: तार्किक अपरेटर र बिट अपरेटर देख्नमा समान देखिन्छन् तर प्रयोगमा फरक छन्।

  • तार्किक अपरेटरहरू (&&, ||, !) शर्त अभिव्यक्तिको सत्यता मूल्यांकन गर्न प्रयोग गरिन्छ। शर्त “साँचो” हो या “झूठो” हो निर्धारण गर्नु यसको उद्देश्य हो।
  • बिट अपरेटरहरू (&, |, ~, ^) पूर्णांक मानको बिट स्तरमा सञ्चालन गर्छन्। विशेष बिटहरूलाई मात्र परिवर्तन गर्न वा फ्ल्याग व्यवस्थापनमा प्रयोग गरिन्छ।

तार्किक अपरेटर र बिट अपरेटरको उद्देश्य फरक भएकोले, शर्त मूल्यांकनका लागि तार्किक अपरेटर र बिट स्तरको सञ्चालनका लागि बिट अपरेटर प्रयोग गर्ने कुरा याद राख्नुहोस्।

Q3. C भाषाको तार्किक अपरेटरको प्राथमिकता सम्झनको लागि के उपायहरू छन्?

A: तार्किक अपरेटरहरूको प्राथमिकता तलको क्रममा हुन्छ: ! (NOT) > && (AND) > || (OR)। यसलाई सम्झनको लागि तलको सरल नियम उपयोगी हुन्छ।

  1. NOT सबैभन्दा बलियो: ! ले शर्तलाई एक्लै उल्ट्याउँछ, त्यसैले यसलाई उच्च प्राथमिकता भएको रूपमा सम्झनुहोस्।
  2. AND ले OR भन्दा उच्च प्राथमिकता पाउँछ: && ले || भन्दा प्राथमिकता पाउँछ। अर्थात्, AND ले अधिक बलियो बन्धन राख्छ भन्ने सम्झनु राम्रो हुन्छ।

साथै, जटिल शर्त अभिव्यक्तिहरूमा प्राथमिकता अस्पष्ट हुन सक्छ, त्यसैले इच्छित मूल्यांकन क्रम स्पष्ट गर्न कोष्ठक () प्रयोग गर्ने सिफारिस गरिन्छ।

Q4. तार्किक अपरेटरको छोटो सर्किट मूल्यांकन (शॉर्ट-सर्किट इभ्यालुएशन) के हो?

A: छोटो सर्किट मूल्यांकन (शॉर्ट-सर्किट इभ्यालुएशन) भनेको तार्किक अपरेटरको मूल्यांकन प्रारम्भिक रूपमा समाप्त हुने प्रक्रिया हो।

  • AND अपरेटर (&&): यदि पहिलो शर्त “झूठो” हो भने, पछिल्ला शर्तहरू मूल्यांकन गरिँदैन।
  • OR अपरेटर (||): यदि पहिलो शर्त “साँचो” हो भने, पछिल्ला शर्तहरू मूल्यांकन गरिँदैन।

उदाहरणका लागि, तलको कोडमा, a 0 भएको कारणले b++ कार्यान्वयन हुँदैन, र b को मान परिवर्तन हुँदैन।

#include <stdio.h>

int main() {
    int a = 0;
    int b = 5;

    if (a && (b++ > 0)) {
        printf("शर्त सत्य छ。
");
    } else {
        printf("शर्त असत्य छ。
");
    }
    printf("b को मान: %d
", b); // b को मान 5 नै रहन्छ
    return 0;
}

छोटो सर्किट मूल्यांकन हुने कुरा बुझेर, शर्त अभिव्यक्तिमा साइड इफेक्ट भएको कोड समावेश गर्दा सावधान रहनु आवश्यक छ।

Q5. if कथनभित्र== को सट्टा= प्रयोग गर्दा के हुन्छ?

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

उदाहरण:

#include <stdio.h>

int main() {
    int x = 5;

    if (x = 0) { // गलत रूपमा असाइनमेन्ट अपरेटर प्रयोग
        printf("x 0 हो。
");
    } else {
        printf("x 0 होइन。
");
    }
    return 0;
}

यो कोडमा, x = 0 ले x मा 0 असाइन गर्छ, जसले शर्तलाई “झूठो” रूपमा मूल्यांकन गराउँछ। तुलना गर्दा सधैं == प्रयोग गर्न ध्यान दिनुहोस्।

FAQ सारांश

यहाँसम्म, हामीले C भाषाका तार्किक अपरेटरहरू सम्बन्धी अक्सर सोधिने प्रश्नहरूको उत्तर दिएका छौं। तार्किक अपरेटरहरूको प्रयोग, तिनीहरूको विशेषता, र बिट अपरेटरहरूसँगको भिन्नता बुझेर, प्रोग्रामको व्यवहारलाई सही रूपमा नियन्त्रण गर्न सकिन्छ। शर्तीय शाखा र लूपमा लचिलो नियन्त्रणका लागि तार्किक अपरेटरहरू अनिवार्य महत्वपूर्ण तत्व हुन्, त्यसैले यहाँ प्राप्त ज्ञानलाई वास्तविक कोडमा प्रयोग गर्नुहोस्।

9. सारांश

यस लेखमा, C भाषा मा तार्किक अपरेटरको बारेमा, यसको आधारभूत भूमिका देखि व्यावहारिक प्रयोग, सामान्य त्रुटिहरू र ध्यान दिनुपर्ने बुँदाहरू सम्म विस्तृत रूपमा व्याख्या गरिएको छ। तल, सिकेका बुँदाहरूलाई पुनरावलोकन गरिन्छ।

9.1 तार्किक अपरेटरको आधारभूत र प्रकारहरू

तार्किक अपरेटरहरू शर्तको “साँचो” वा “झूठ” को मूल्यांकन गरी, प्रोग्रामको शाखा र लूपलाई नियन्त्रण गर्ने महत्वपूर्ण उपकरण हुन्। C भाषामा मुख्यतया तलका ३ वटा तार्किक अपरेटरहरू छन्, र प्रत्येकको प्रयोग बुझ्न आवश्यक छ।

  • तार्किक AND अपरेटर:&&
    दुवै शर्तहरू साँचो भएमा साँचो फिर्ता गर्छ।
  • तार्किक OR अपरेटर:||
    कुनै एक शर्त साँचो भएमा साँचो फिर्ता गर्छ।
  • तार्किक NOT अपरेटर:!
    शर्तको सत्य/असत्यलाई उल्ट्याउने भूमिका हुन्छ।

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

तार्किक अपरेटरहरूमा मूल्यांकन क्रम हुन्छ, ! सबैभन्दा उच्च प्राथमिकता पाउँछ, त्यसपछि &&, अन्तमा || मूल्यांकन हुन्छ। साथै, प्राथमिकता गडबड हुने अवस्थामा, कोष्ठक प्रयोग गरेर स्पष्ट रूपमा मूल्यांकन क्रम निर्दिष्ट गरेर, गलत बुझाइलाई रोक्न सजिलो हुन्छ।

9.3 शर्तीय शाखा र लूपमा प्रयोग

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

9.4 तार्किक अपरेटर र बिट अपरेटरको भिन्नता

तार्किक अपरेटर र बिट अपरेटरको उद्देश्य फरक हुन्छ। शर्तको सत्य/असत्य निर्धारण गर्ने तार्किक अपरेटरको विपरीत, बिट अपरेटर बिट स्तरमा संख्याको सञ्चालनका लागि प्रयोग हुन्छ। समान प्रतीकहरू भए पनि भूमिका फरक भएकाले, भ्रम नहोस् भनेर ध्यान दिनु आवश्यक छ।

9.5 सामान्य त्रुटिहरू र ध्यान दिनुपर्ने बुँदाहरू

तार्किक अपरेटर प्रयोग गर्दा, केही सामान्य त्रुटिहरू हुन्छन्। && र & को भ्रम, || र | को भ्रम, = र == को गल्ती, छोटो‑सर्किट मूल्यांकनको बुझाइको कमी आदि, यी आधारभूत त्रुटिहरू टाढा राखेर, प्रोग्रामको अनपेक्षित व्यवहारलाई रोक्न सकिन्छ।

9.6 FAQबाट प्राप्त व्यावहारिक ज्ञान

तार्किक अपरेटरको प्रयोग सम्बन्धी सामान्य प्रश्नहरू पनि समाधान गरियो। विशिष्ट कोड उदाहरणहरू मार्फत वास्तविक प्रयोग स्थितिहरू सिकियो, र FAQ मार्फत छोटो‑सर्किट मूल्यांकन, प्राथमिकता, बिट अपरेटरसँगको भिन्नता पनि बुझियो।

अन्तमा

तार्किक अपरेटरको सही बुझाइ C भाषा प्रोग्रामिङमा शर्तीय नियन्त्रणलाई सहज बनाउने लागि अनिवार्य छ। बहु शर्तहरू संयोजन गरेर, लचिलो प्रोग्राम निर्माण गर्ने क्षमता हासिल गरेर, व्यावहारिक कोड लेख्न सकिन्छ। यो लेखले C भाषामा तार्किक अपरेटरको बुझाइमा सहयोग पुर्याओस्, र भविष्यको प्रोग्रामिङमा उपयोगी ज्ञानको एक भाग बनोस् भन्ने आशा छ।

侍エンジニア塾