हमें एक पूर्णांक संख्या और लेफ्ट, राइट मानों के साथ एक रेंज दी गई है। कार्य है बाइनरी प्रतिनिधित्व में लेफ्ट से राइट बिट पोजीशन के बीच अनसेट बिट्स (0 बिट्स) गिनना।
इनपुट - int number = 50, left = 2, right = 5
आउटपुट - रेंज में कुल अनसेट बिट्स: 2
व्याख्या - 50 का बाइनरी: 110010। पोजीशन 2 से 5 के बीच (1-आधारित): बिट्स हैं 1,0,0,1 - दो अनसेट बिट्स।
उपयोग किया गया दृष्टिकोण
- संख्या और रेंज इनपुट करें।
- रेंज में कुल बिट्स =
right - left + 1 - रेंज में सेट बिट्स निकालने के लिए बिटमास्क बनाएं:
mask = ((1 << right) - 1) ^ ((1 << (left-1)) - 1) - रेंज में सेट बिट्स =
__builtin_popcount(number & mask) - अनसेट बिट्स = कुल बिट्स - सेट बिट्स।
उदाहरण (C++ कोड)
#include <iostream>
using namespace std;
unsigned int unset_bits_range(unsigned int number, unsigned int left, unsigned int right) {
unsigned int total_bits = right - left + 1;
// रेंज मास्क बनाएं
unsigned int mask = ((1u << right) - 1) ^ ((1u << (left - 1)) - 1);
unsigned int set_in_range = __builtin_popcount(number & mask);
unsigned int unset = total_bits - set_in_range;
cout << "8-bit number of " << number << " is: ";
for (unsigned int i = 1 << 7; i > 0; i >>= 1)
(number & i) ? cout << "1" : cout << "0";
cout << "\nCount of total unset bits in range [" << left << "," << right << "] are: " << unset;
return unset;
}
int main() {
unsigned int number = 80, left = 1, right = 4;
unset_bits_range(number, left, right);
return 0;
} आउटपुट
8-bit number of 80 is: 01010000 Count of total unset bits in range [1,4] are: 2