समस्या
C प्रोग्रामिंग भाषा में फ़ंक्शन का उपयोग करके दशमलव संख्या को बाइनरी संख्या में कैसे बदलें?
समाधान
इस प्रोग्राम में, हम main() में toBinary फ़ंक्शन को कॉल करते हैं। कॉल किया गया फ़ंक्शन वास्तविक रूपांतरण करता है।
तर्क
while (decimal != 0) {
remainder = decimal % 2; // शेष (0 या 1)
binary = binary + remainder * factor; // स्थान मूल्य जोड़ें
factor = factor * 10; // अगला स्थान मूल्य (1, 10, 100, 1000...)
decimal = decimal / 2; // 2 से विभाजित
}
प्रोग्राम 1: दशमलव से बाइनरी
#include <stdio.h>
long toBinary(int decimal);
int main() {
long binary;
int decimal;
printf("कोई दशमलव संख्या दर्ज करें: ");
scanf("%d", &decimal);
binary = toBinary(decimal);
printf("बाइनरी मान: %ld\n", binary);
return 0;
}
long toBinary(int decimal) {
long binary = 0, remainder, factor = 1;
while (decimal != 0) {
remainder = decimal % 2;
binary = binary + remainder * factor;
factor = factor * 10;
decimal = decimal / 2;
}
return binary;
}
आउटपुट
कोई दशमलव संख्या दर्ज करें: 12
बाइनरी मान: 1100
चरण-दर-चरण ट्रेस (12 के लिए)
| चरण | decimal | remainder | factor | binary |
|---|---|---|---|---|
| 1 | 12 | 0 | 1 | 0 |
| 2 | 6 | 0 | 10 | 0 |
| 3 | 3 | 1 | 100 | 100 |
| 4 | 1 | 1 | 1000 | 1100 |
| 5 | 0 | - | - | लूप समाप्त |
प्रोग्राम 2: बाइनरी से दशमलव
#include <stdio.h>
#include <math.h>
int toDecimal(long binary);
int main() {
long binary;
int decimal;
printf("बाइनरी संख्या दर्ज करें: ");
scanf("%ld", &binary);
decimal = toDecimal(binary);
printf("दशमलव मान: %d\n", decimal);
return 0;
}
int toDecimal(long binary) {
int decimal = 0, i = 0, remainder;
while (binary != 0) {
remainder = binary % 10;
binary /= 10;
decimal += remainder * pow(2, i);
++i;
}
return decimal;
}
आउटपुट
बाइनरी संख्या दर्ज करें: 10011
दशमलव मान: 19
चरण-दर-चरण ट्रेस (10011 के लिए)
| चरण | binary | remainder | i | 2^i | decimal |
|---|---|---|---|---|---|
| 1 | 10011 | 1 | 0 | 1 | 1 |
| 2 | 1001 | 1 | 1 | 2 | 3 |
| 3 | 100 | 0 | 2 | 4 | 3 |
| 4 | 10 | 0 | 3 | 8 | 3 |
| 5 | 1 | 1 | 4 | 16 | 19 |
| 6 | 0 | - | - | - | लूप समाप्त |
बेहतर दृष्टिकोण: बाइनरी स्ट्रिंग के रूप में आउटपुट
ऊपर दिया गया प्रोग्राम बाइनरी को पूर्णांक के रूप में लौटाता है (जो बड़ी संख्याओं के लिए ओवरफ्लो कर सकता है)। स्ट्रिंग के रूप में बेहतर:
#include <stdio.h>
void toBinaryString(int n, char *buffer) {
int i = 0;
if (n == 0) {
buffer[0] = '0';
buffer[1] = '\0';
return;
}
// बिट्स को रिवर्स क्रम में निकालें
char temp[32];
while (n > 0) {
temp[i++] = (n % 2) + '0';
n /= 2;
}
// उल्टा करके buffer में कॉपी करें
for (int j = 0; j < i; j++) {
buffer[j] = temp[i - 1 - j];
}
buffer[i] = '\0';
}
int main() {
char binary[33];
toBinaryString(12345, binary);
printf("12345 बाइनरी में: %s\n", binary);
return 0;
}
आउटपुट
12345 बाइनरी में: 11000000111001
बिटवाइज़ ऑपरेटर का उपयोग करके (अधिक कुशल)
void printBinary(int n) {
// 32-बिट int के लिए
for (int i = 31; i >= 0; i--) {
int bit = (n >> i) & 1;
printf("%d", bit);
if (i % 4 == 0) printf(" "); // 4-बिट समूह
}
printf("\n");
}