ट्रेलिंग जीरोज़
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 - नेक्स्ट पावर ऑफ टू खोजना
- बिटबोर्ड प्रतिनिधित्व (चेस इंजन्स)