Decimal to Binary
Conversion के पीछे का विचार
हमारी रोज़मर्रा की संख्याएँ base 10 (decimal) में होती हैं, अंक 0-9 इस्तेमाल करती हैं। Computer base 2 (binary) इस्तेमाल करते हैं, सिर्फ़ 0 और 1। Decimal number को binary में बदलना यानी उसे केवल इन्हीं दो अंकों से दोबारा लिखना।
तरकीब सरल है: number को बार-बार 2 से भाग दें और हर बार remainder नोट करें। हर remainder एक binary अंक (bit) है। जब number 0 हो जाए, तो आपके पास सारे bits हैं — बस उन्हें उल्टा पढ़ें। एक dry run से देखते हैं क्यों।
कदम-दर-कदम dry run
चलिए 13 को हाथ से binary में बदलें, हर कदम 2 से भाग देते हुए:
| कदम | Number | ÷ 2 भागफल | Remainder (bit) |
|---|---|---|---|
| 1 | 13 | 6 | 1 |
| 2 | 6 | 3 | 0 |
| 3 | 3 | 1 | 1 |
| 4 | 1 | 0 | 1 |
जिस क्रम में remainders मिले वे हैं 1, 0, 1, 1। इन्हें नीचे से ऊपर (उल्टा) पढ़ने पर मिलता है 1101 — यही 13 का binary है।
तरीका 1: 2 से भाग (array)
सबसे आम program हर remainder को array में रखता है, फिर array को उल्टा print करता है।
#include <stdio.h>
int main() {
int n = 13, binary[32], i = 0;
if (n == 0) { printf("0"); return 0; } // zero संभालें
while (n > 0) {
binary[i] = n % 2; // remainder सहेजें
n = n / 2; // अगले पर जाएँ
i++;
}
// उल्टा print करें
for (int j = i - 1; j >= 0; j--)
printf("%d", binary[j]);
return 0;
}1101
Loop array को 1, 0, 1, 1 से भरता है; उल्टा-print उसे 1101 बना देता है।
तरीका 2: recursion से
Recursion array को पूरी तरह हटा देता है। print करने से पहले खुद को call करके, bits स्वाभाविक रूप से सही क्रम में आते हैं।
#include <stdio.h>
void toBinary(int n) {
if (n == 0) return;
toBinary(n / 2); // पहले गहरे जाएँ
printf("%d", n % 2); // लौटते समय print करें
}
int main() {
int n = 13;
if (n == 0) printf("0");
else toBinary(n);
return 0;
}1101
क्योंकि function print करने से पहले खुद को call करता है, सबसे गहरी call (most significant bit) पहले print होती है। उल्टाव अपने आप हो जाता है।
तरीका 3: bitwise operators से
आप हर bit को सीधे right-shift >> और AND & operators से भी देख सकते हैं।
#include <stdio.h>
int main() {
int n = 13;
int started = 0;
for (int i = 31; i >= 0; i--) {
int bit = (n >> i) & 1; // i-वाँ bit पढ़ें
if (bit) started = 1;
if (started) printf("%d", bit);
}
return 0;
}1101
यह सबसे ऊँचे bit से नीचे चलता है, पहले 1 आने तक leading zeros छोड़ते हुए। यह सबसे करीब है कि computer असल में number कैसे रखता है।
त्वरित संदर्भ: decimal से binary
| Decimal | Binary |
|---|---|
| 2 | 10 |
| 5 | 101 |
| 8 | 1000 |
| 10 | 1010 |
| 13 | 1101 |
| 16 | 10000 |
आम गलतियाँ
- Remainders को उल्टा करने के बजाय इकट्ठा किए क्रम में print करना।
- 0 की विशेष स्थिति भूल जाना, जो वरना कुछ print नहीं करती।
- बड़ी संख्याओं के लिए बहुत छोटा array इस्तेमाल करना (int के लिए 32 bits सुरक्षित size है)।
n % 2(bit) औरn / 2(अगला number) में उलझना।
तरीका 1 को बदलकर number user से scanf से पढ़ें, और इसे 0, 1, 25 और 255 से test करें। पुष्टि करें कि 255 11111111 देता है।
सारांश
- Decimal को binary में बदलें — बार-बार 2 से भाग देकर remainders इकट्ठा करके।
- सही binary number पाने के लिए remainders उल्टे क्रम में पढ़ने होते हैं।
- तरीका 1 array इस्तेमाल करता है; तरीका 2 recursion; तरीका 3 bitwise operators।
- 0 को हमेशा विशेष स्थिति की तरह संभालें।
- उदाहरण: 13 बनता है
1101।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C में decimal number को binary में कैसे बदलते हैं?
हम remainders उल्टे क्रम में क्यों पढ़ते हैं?
13 का binary क्या है?
1101 है। इसे place values जोड़कर जाँच सकते हैं: 8 + 4 + 0 + 1 = 13, जो 8, 4, 2, 1 स्थानों के लिए bits 1-1-0-1 से मेल खाता है।क्या C में बिना array के decimal को binary में बदल सकते हैं?
n / 2 के साथ call करता है, फिर लौटते समय n % 2 print करता है, जिससे bits बिना array में रखे स्वाभाविक रूप से सही क्रम में बनते हैं।Binary में बदलते समय 0 को कैसे संभालें?
n > 0 शुरू से ही false होती है, इसलिए कुछ print नहीं होता। इसे विशेष स्थिति की तरह संभालें — input 0 होने पर सीधे 0 print करें।