Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: बाइनरी नंबर में ट्रेलिंग और लीडिंग जीरोज़ गिनना

ट्रेलिंग जीरोज़

LSB (लीस्ट सिग्निफिकेंट बिट) से पहले सेट बिट (1) के बाद के जीरोज़ की संख्या।

उदाहरण: 104 (दशमलव)

बाइनरी: 1101000 (MSB ... LSB)

LSB से: 0, 0, 0, 1 → पहले 1 के बाद 3 जीरोज़। ट्रेलिंग जीरोज़ = 3।

ट्रेलिंग जीरोज़ गिनने का प्रोग्राम

#include <stdio.h>
#include <stdlib.h>

int main() {
    int number, i, trail = 0, size;
    printf("Enter a number: ");
    scanf("%d", &number);
    size = sizeof(int) * 8; // 32 बिट्स मानकर
    for(i = 0; i < size; i++) {
        if((number >> i) & 1) // i-th बिट चेक
            break;
        trail++;
    }
    printf("Trailing zeros = %d\n", trail);
    return 0;
}

आउटपुट

Enter a number: 24
Trailing zeros = 3

लीडिंग जीरोज़

MSB (मोस्ट सिग्निफिकेंट बिट) से पहले सेट बिट (1) से पहले के जीरोज़ की संख्या।

उदाहरण: 94 (दशमलव)

32-बिट बाइनरी: 000...001011110

पहला 1 बिट पोजीशन 6 पर (0-आधारित LSB से), तो लीडिंग जीरोज़ = 31 - 6 = 25।

लीडिंग जीरोज़ गिनने का प्रोग्राम

#include <stdio.h>
#include <stdlib.h>

int main() {
    int number, i, lead = 0, size, msb_mask;
    printf("Enter a number: ");
    scanf("%d", &number);
    size = sizeof(int) * 8;
    msb_mask = 1 << (size - 1); // MSB मास्क
    for(i = 0; i < size; i++) {
        if((number << i) & msb_mask) // i-th बिट MSB पर लाकर चेक
            break;
        lead++;
    }
    printf("Leading zeros = %d\n", lead);
    return 0;
}

आउटपुट

Enter a number: 94
Leading zeros = 25

बिल्ट-इन फंक्शन्स (GCC/Clang)

// ट्रेलिंग जीरोज़
int tz = __builtin_ctz(x); // x != 0
// लीडिंग जीरोज़
int lz = __builtin_clz(x); // x != 0
// पॉपकाउंट (सेट बिट्स)
int pc = __builtin_popcount(x);

ये हार्डवेयर इंस्ट्रक्शन्स का उपयोग करते हैं और बहुत तेज़ हैं।

एप्लीकेशन्स

  • बिट मैनिपुलेशन एल्गोरिदम्स
  • पावर-ऑफ-टू चेक: (x & (x-1)) == 0
  • नेक्स्ट पावर ऑफ टू खोजना
  • बिटबोर्ड प्रतिनिधित्व (चेस इंजन्स)
  1. - पायथन प्रोग्राम: किसी संख्या के फैक्टोरियल में अनुगामी शून्यों की गणना करें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक पूर्णांक n दिया गया है, हमें फैक्टोरियल में अनुगामी शून्यों की संख्या गिननी है। उदाहरण = 1): count += int(n / i) i *= 5 return int(count) # ड्राइवर प्रोग्राम n = 79 print(Count of trailing 0s in, n, ! i

  1. पायथन प्रोग्राम: लगातार 1 के बिना बाइनरी स्ट्रिंग्स की संख्या गिनें पायथन प्रोग्राम: लगातार 1 के बिना बाइनरी स्ट्रिंग्स की संख्या गिनें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक धनात्मक पूर्णांक N दिया गया है, हमें लंबाई N की सभी संभावित अलग बाइनरी स्ट्रिंग्स गिननी हैं जिनमें लगातार 1 न हों। उदाहरण # स्ट्रिंग्स की संख्या गिनें def countStrings(n): a = [0 for i in range(n)] b = [0 for i in r

  1. - संख्या में कुल बिट्स गिनने के लिए पायथन प्रोग्राम

    समस्या विवरण सबसे पहले हम एक संख्या इनपुट करते हैं फिर bin() फंक्शन का उपयोग करके इस संख्या को बाइनरी में बदलते हैं और अगला आउटपुट स्ट्रिंग के पहले दो वर्ण 0b को हटाते हैं, फिर बाइनरी स्ट्रिंग की लंबाई की गणना करते हैं। उदाहरण इनपुट: 200 आउटपुट: 8 व्याख्या 200 का बाइनरी प्रतिनिधित्व 11001000 है