एक दी गई धनात्मक संख्या जब बाइनरी में परिवर्तित होती है, तो इसमें कई सेट बिट्स होते हैं। बाइनरी संख्या में सेट बिट्स को 1 द्वारा दर्शाया जाता है। इस लेख में हम देखेंगे कि बाइनरी मान में परिवर्तित होने के बाद दी गई संख्या में सेट बिट्स की संख्या कैसे प्राप्त करें।
bin और स्लाइसिंग का उपयोग करके
नीचे दिए गए उदाहरण में हम एक संख्या लेते हैं और बाइनरी मान प्राप्त करने के लिए bin फ़ंक्शन लागू करते हैं। फिर हम बाइनरी संख्या में जोड़े गए प्रीफिक्स को हटाने के लिए इसे स्लाइस करते हैं और फिर सेट बिट्स की गिनती प्राप्त करने के लिए रेंज फ़ंक्शन लागू करते हैं।
उदाहरण
def SetBits_cnt(n, l, r):
bin_val = bin(n)
# bin_val रूपांतरण में '0b' प्रीफिक्स हटाएं
bin_val = bin_val[2:]
print(bin_val)
# स्ट्रिंग उल्टा करें
bin_val = bin_val[-1::-1]
# इंडेक्स l-1 से शुरू करके सभी सेट बिट '1' गिनें
print(len([bin_val[i] for i in range(l - 1, r) if bin_val[i] == '1']))
SetBits_cnt(83, 1, 6)
आउटपुट
1010011 3
बिटवाइज ऑपरेटर का उपयोग करके
बिटवाइज ऑपरेटर का उपयोग करके भी सेट बिट्स प्राप्त किए जा सकते हैं। नीचे दिए गए उदाहरण में हम पहले रेंज को ध्यान में रखते हुए बिटवाइज ऑपरेटर लागू करते हैं और फिर इसे दूसरे फ़ंक्शन में पास करते हैं जो केवल सेट बिट्स गिनता है।
उदाहरण
def trackBitsInRange(n, l, r):
# बिटवाइज ऑपरेटर का उपयोग करके
bit_num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)
# बिटवाइज ऑपरेशन के बाद सेट बिट्स गिनें
return trackSetBits(n & bit_num)
def trackSetBits(n):
count = 0
while n:
n &= (n - 1)
count += 1
return count
print(trackBitsInRange(83, 1, 6))
आउटपुट
3