इस समस्या में एक फ्लोटिंग पॉइंट मान दिया गया है। हमें इसके बाइनरी प्रतिनिधित्व में सेट बिट्स की संख्या ढूंढनी है।
उदाहरण के लिए, यदि एक फ्लोटिंग पॉइंट संख्या 0.15625 है तो इसमें छह सेट बिट्स हैं। एक सामान्य C कंपाइलर सिंगल प्रिसिजन फ्लोटिंग पॉइंट प्रतिनिधित्व का उपयोग करता है। तो यह इस तरह दिखेगा।
बिट मानों में बदलने के लिए हमें संख्या को एक पॉइंटर वेरिएबल में लेना होगा, फिर पॉइंटर को char* प्रकार के डेटा में टाइपकास्ट करना होगा। फिर प्रत्येक बाइट को एक-एक करके प्रोसेस करें। फिर हम प्रत्येक char के सेट बिट्स गिन सकते हैं।
उदाहरण
#include <stdio.h>
int char_set_bit_count(char number) {
unsigned int count = 0;
while (number != 0) {
number &= (number - 1);
count++;
}
return count;
}
int count_float_set_bit(float x) {
unsigned int n = sizeof(float) / sizeof(char); // बाइनरी समकक्ष में कैरेक्टर्स की संख्या गिनें
int i;
char *ptr = (char *)&x; // वेरिएबल के पते को char में कास्ट करें
int count = 0; // परिणाम संग्रहीत करने के लिए
for (i = 0; i < n; i++) {
count += char_set_bit_count(*ptr); // प्रत्येक बाइट के लिए बिट्स गिनें
ptr++;
}
return count;
}
int main() {
float x = 0.15625;
printf("बाइनरी प्रतिनिधित्व %f में %u सेट बिट्स हैं", x, count_float_set_bit(x));
}
आउटपुट
बाइनरी प्रतिनिधित्व 0.156250 में 6 सेट बिट्स हैं