C भाषा मा 16-आधारिक संख्याको पूर्ण मार्गदर्शन: आधारदेखि प्रयोगसम्म

目次

1. परिचय

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

2. संख्याको अभिव्यक्ति विधि

10‑आधार, 8‑आधार, 16‑आधारको भिन्नता

C भाषामा, संख्याहरूलाई तलको रूपमा अभिव्यक्त गर्न सकिन्छ।

  1. 10‑आधार
    मानवहरूले दैनिक रूपमा प्रयोग गर्ने संख्यात्मक अभिव्यक्ति विधि हो। उदाहरणका लागि, 123 लाई 10‑आधारको रूपमा ह्यान्डल गरिन्छ।
  2. 8‑आधार
    संख्याको सुरुमा 0 जोडेर 8‑आधारको रूपमा ह्यान्डल गरिन्छ। उदाहरणका लागि, 0123 ले 8‑आधारमा “83” अर्थ दिन्छ।
  3. 16‑आधार
    संख्याको सुरुमा 0x वा 0X जोडेर 16‑आधारको रूपमा व्याख्या गरिन्छ। उदाहरणका लागि, 0x123 ले 16‑आधारमा “291” अर्थ दिन्छ।

16‑आधारको फाइदाहरू

16‑आधारलाई द्विआधारीको संक्षिप्त रूपको रूपमा प्रयोग गरिन्छ। 1 अंकको 16‑आधारले 4 अंकको द्विआधारीलाई प्रतिनिधित्व गर्न सक्छ, जसले बिट‑स्तरको अपरेसनमा अत्यन्त उपयोगी बनाउँछ। साथै, डिबगिङ कार्यमा मेमोरीको सामग्री जाँच गर्दा आदि धेरै प्रयोग गरिन्छ।

3. हेक्साडेसिमलको मूलभूत

हेक्साडेसिमलको संरचना

हेक्साडेसिमल तलका 16 प्रकारका चिन्हहरूबाट बनिएको छ:

  • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
    यहाँ, A ले 10, B ले 11, …, F ले 15 जनाउँछ।

हेक्साडेसिमलबाट दशमलवमा रूपान्तरण

उदाहरणका लागि, हेक्साडेसिमलको 0x2F लाई दशमलवमा रूपान्तरण गर्दा:

  • 0x2F = (2 × 16) + (15 × 1) = 47

दशमलवबाट हेक्साडेसिमलमा रूपान्तरण

दशमलवको 47 लाई हेक्साडेसिमलमा रूपान्तरण गर्न:

  1. 16 ले भाग गर्ने(47 ÷ 16 = 2 बाँकी 15)。
  2. भागफललाई उच्च अंकको रूपमा, बाँकीलाई तल्लो अंकको रूपमा व्यक्त गर्ने।
  • परिणाम:0x2F

4. C भाषा मा 16-आधारको लिटरल अभिव्यक्ति

लिटरल लेख्ने तरिका

C भाषा मा, 16-आधारलाई तलको स्वरूपमा लेखिन्छ:

int hexValue = 0x1A; // 16-आधारमा 「26」

printf द्वारा 16-आधारको आउटपुट

C भाषामा 16-आधार देखाउन, printf फलन प्रयोग गरिन्छ:

#include <stdio.h>

int main() {
    int hexValue = 0x1A;
    printf("हेक्साडेसिमल: %X
", hexValue); // बडो अक्षरमा प्रदर्शन
    printf("हेक्साडेसिमल: %x
", hexValue); // सानो अक्षरमा प्रदर्शन
    return 0;
}

आउटपुट परिणाम:

16-हेक्साडेसिमल: 1A
16-हेक्साडेसिमल: 1a

इन्टिजर प्रकारमा असाइन गर्ने उदाहरण

16-आधारलाई इन्टिजर प्रकारको चलमा असाइन गर्न सकिन्छ।

int num = 0xFF; // 255 को रूपमा व्यवहार गरिन्छ

 

5. हेक्साडेसिमल र बिट अपरेसन

बिट मास्कको प्रयोग

हेक्साडेसिमल बिट मास्क अपरेसनमा प्रायः प्रयोग गरिन्छ। तल केही ठोस उदाहरणहरू छन्:

#include <stdio.h>

int main() {
    unsigned char value = 0xAF; // 16-आधारको 'AF'
    unsigned char mask = 0x0F;  // तलको 4 बिट मात्र निकाल्ने मास्क

    unsigned char result = value & mask;
    printf("परिणाम: 0x%X\n", result); // परिणाम '0x0F' हो
    return 0;
}

बिट फ्ल्यागको सेटिङ

विशिष्ट बिटलाई 1 मा सेट गर्ने अवस्थामा:

unsigned char flags = 0x00;
flags |= 0x10; // ४ औं बिटलाई १ मा सेट गर्नुहोस्

6. हेक्साडेसिमल र फ्लोटिङ‑प्वाइन्ट नम्बरहरू

फ्लोटिङ‑प्वाइन्ट नम्बरलाई हेक्साडेसिमलमा व्यक्त गर्ने विधि विशेष छ, तर printf फंक्शन प्रयोग गरेर सम्भव छ:

#include <stdio.h>

int main() {
    double value = 123.456;
    printf("हेक्साडेसिमल ढाँचा: %a
", value);
    return 0;
}

आउटपुट उदाहरण:

हेक्साडेसिमल ढाँचा: 0x1.ed70a3d70a3d7p+6

 

7. हेक्साडेसिमलको प्रयोगका उदाहरण

मेमोरी डम्पको विश्लेषण

डिबग गर्दा हेक्साडेसिमल प्रयोग गरेर मेमोरी सामग्री जाँच गर्ने उदाहरण:

#include <stdio.h>

void dumpMemory(void* ptr, size_t size) {
    unsigned char* byte = (unsigned char*)ptr;
    for (size_t i = 0; i < size; i++) {
        printf("%02X ", byte[i]);
        if ((i + 1) % 16 == 0) printf("
");
    }
}

int main() {
    int data = 0x12345678;
    dumpMemory(&data, sizeof(data));
    return 0;
}

8. सारांश

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

FAQ: C भाषा मा hexadecimal सम्बन्धी अक्सर सोधिने प्रश्नहरू

Q1: C भाषामा hexadecimal घोषणा गर्दा, 0x थप्न बिर्सिएमा के हुन्छ?

यदि hexadecimal लिटरलको सुरुमा 0x (वा 0X) थप्न बिर्सियो भने, त्यो मानलाई सामान्य दशमलव रूपमा व्याख्या गरिन्छ।
उदाहरण:

int value = 123; // यो १०-आधारको १२३ को रूपमा व्यवहार गरिन्छ।

यदि hexadecimal रूपमा प्रयोग गर्न चाहनुहुन्छ भने, अनिवार्य रूपमा 0x थप्नुपर्छ।

Q2: C भाषामा hexadecimal इनपुट (scanf) कसरी गर्ने?

scanf प्रयोग गरेर hexadecimal इनपुट गर्दा, फर्म्याट स्पेसिफायर %x प्रयोग गरिन्छ।
उदाहरण:

#include <stdio.h>

int main() {
    int value;
    printf("कृपया हेक्साडेसिमल प्रविष्ट गर्नुहोस् (उदाहरण: 0x1A): ");
    scanf("%x", &value); // हेक्साडेसिमल पढ्नुहोस्
    printf("प्रविष्ट गरिएको मान (10 दशमलव): %d
", value);
    return 0;
}

प्रयोगकर्ताले 0x1A इनपुट गर्दा, प्रोग्रामले दशमलव “26” रूपमा प्रक्रिया गर्छ।

Q3: C भाषामा hexadecimal लाई स्ट्रिङ्गको रूपमा कसरी प्रयोग गर्ने?

यदि hexadecimal लाई स्ट्रिङ्गको रूपमा प्रयोग गर्न चाहनुहुन्छ भने, स्ट्रिङ्ग अपरेसन फङ्क्सन वा फर्म्याट स्पेसिफायर प्रयोग गर्नुहोस्।
उदाहरण: संख्यालाई hexadecimal स्ट्रिङ्गमा रूपान्तरण गर्ने:

#include <stdio.h>

int main() {
    int value = 255;
    char hexStr[10];
    sprintf(hexStr, "%X", value); // संख्या 16-आधार स्ट्रिङमा रूपान्तरण
    printf("16-आधार स्ट्रिङ: %s\n", hexStr);
    return 0;
}

आउटपुट:

१६-आधार स्ट्रिङ: FF

Q4: hexadecimal को अंकहरू कम भएमा के हुन्छ?

C भाषामा, hexadecimal लिटरलको अंकहरू घटाए पनि समस्या बिना चल्छ। उदाहरणका लागि 0xA ले 0x000A जस्तै अर्थ राख्छ। तर, प्रोग्रामको पढ्न सजिलो बनाउन आवश्यक परे शून्यले भरिने सिफारिस गरिन्छ।

Q5: C भाषामा hexadecimal प्रयोग गर्दा त्रुटि हुने मुख्य कारणहरू के हुन्?

मुख्य कारणहरू तल उल्लेखित छन्:

  1. लिटरलमा 0x थप्न बिर्सिनु
  • समाधान: hexadecimal लेख्दा अनिवार्य रूपमा 0x वा 0X थप्नुहोस्।
  1. फर्म्याट स्पेसिफायर असमानता
  • उदाहरण: printf मा %d प्रयोग गरेर hexadecimal आउटपुट गर्ने प्रयास।
  • समाधान: hexadecimal को लागि %x वा %X प्रयोग गर्नुहोस्।
  1. डेटा प्रकार असमानता
  • उदाहरण: hexadecimal प्रयोग गर्ने भेरिएबललाई unsigned बनाएको छैन, जसले अनपेक्षित चिन्ह थप्न सक्छ।
  • समाधान: आवश्यक परे unsigned थप्नुहोस्।

Q6: दशमलवलाई hexadecimal मा रूपान्तरण गर्ने सरल तरिका के हो?

प्रोग्रामभित्र दशमलवलाई hexadecimal मा रूपान्तरण गर्न printf फङ्क्सन प्रयोग गरिन्छ।
उदाहरण:

#include <stdio.h>

int main() {
    int decimalValue = 42;
    printf("दशमलव संख्या: %d -> हेक्साडेसिमल संख्या: %X
", decimalValue, decimalValue);
    return 0;
}

आउटपुट:

दशमलव: 42 -> षोडशमलव: 2A

Q7: hexadecimal मा नकारात्मक मानहरू प्रयोग गर्न सकिन्छ?

हो, hexadecimal मा पनि नकारात्मक मानहरू प्रयोग गर्न सम्भव छ। तर, नकारात्मक मानहरू आन्तरिक रूपमा 2 को पूरक स्वरूपमा प्रतिनिधित्व गरिन्छ।
उदाहरण:

#include <stdio.h>

int main() {
    int negativeValue = -16;
    printf("10 दशमलव: %d -> 16 षडश: %X\n", negativeValue, negativeValue);
    return 0;
}

आउटपुट:

10 दशमलव: -16 -> 16 हेक्साडेसिमल: FFFFFFF0

यहाँ FFFFFFF0 2 को पूरकमा प्रतिनिधित्व गरिएको नकारात्मक hexadecimal हो।

Q8: C भाषामा hexadecimal को एरे प्रयोग गर्न कसरी गर्ने?

hexadecimal एरे बनाउँदा, लिटरल नोटेशनलाई सिधै प्रयोग गर्न सकिन्छ।
उदाहरण:

#include <stdio.h>

int main() {
    unsigned char hexArray[] = {0x1A, 0x2B, 0x3C, 0x4D};

    for (int i = 0; i < sizeof(hexArray); i++) {
        printf("सरणी[%d]: 0x%X
", i, hexArray[i]);
    }
    return 0;
}

आउटपुट:

सरणी[0]: 0x1A
सरणी[1]: 0x2B
सरणी[2]: 0x3C
सरणी[3]: 0x4D
侍エンジニア塾