प्रोग्रामिंग करते समय अन्य संख्या आधारों का उपयोग क्यों करें


35

मेरे सहकर्मी और मैं इस बात का पता लगाने के लिए अपने दिमाग को झुका रहे हैं कि कोई भी अपने बेस से 10 नंबर के आधार पर नंबर प्रोग्राम करने के लिए क्यों जाएगा।

मैंने सुझाव दिया कि शायद आप सही आधार के साथ चर डालकर लंबे समीकरणों को अनुकूलित कर सकते हैं, उदाहरण के लिए, यदि आपके पास केवल 5 में से 5 सेट हैं, जिसमें कोई अवशेष नहीं है जो आप आधार 5 का उपयोग कर सकते हैं), लेकिन मुझे यकीन नहीं है अगर यह सच है।

कोई विचार?


6
क्या आपके पास एक विशिष्ट उदाहरण है जिसने इस प्रश्न को उठाया है? बेस -2 या बेस -16 में मौजूद चीजें स्पष्ट रूप से उनके फायदे हैं क्योंकि कंप्यूटर को समझना आसान है।
केडी तेतरलिया

4
आधार में "प्रोग्रामिंग नंबर क्या है ..." का अर्थ है? नंबर हैं। अवधि। वे आंतरिक रूप से कुछ आधार में प्रतिनिधित्व करते हैं लेकिन यह ज्यादातर मायने नहीं रखता है, और किसी भी अंकगणितीय नियमों को नहीं बदलता है।

12
@ जेएमडी - कृपया अपने दो क्रॉस-पोस्टिंग को हटाने के लिए मॉडरेटरों के साथ काम करें और एक को यहां पी.एस.एफ. साइटों पर क्रॉस-पोस्टिंग पर आधारित है। Mods आपके बजाय प्रश्नों को माइग्रेट कर सकते हैं।

10
@ जेएमडी - क्रॉस पोस्टिंग अभी भी कुछ ऐसा नहीं है जो आपको करना चाहिए। जरूरत पड़ने पर ऐसे सवालों के लिए माइग्रेशन प्रक्रिया होती है
ऊद

2
@ जेएमडी क्रॉस पोस्ट न करें, एक प्रश्न एक साइट के लिए उपयुक्त होना अत्यंत दुर्लभ है। इस बार उदाहरण के लिए, आपका प्रश्न स्टैक ओवरफ्लो पर विषय से हटकर था। लेकिन यहां तक ​​कि अगर आपका प्रश्न दोनों साइटों के लिए उपयुक्त था, तो साइटों के आसपास अपने प्रश्न की खरीदारी आमतौर पर होती है। हम सभी यहां अपना समय दे रहे हैं, क्रॉस पोस्टिंग से पहले स्टैक ओवरफ्लो पर आपको जो उत्तर मिल रहे थे, उनका मूल्यांकन करने के लिए आप कम से कम इंतजार कर सकते थे।
यानिस

जवाबों:


59

आधार संख्या के अलावा, कोड में, संख्या लिखने का सामान्य कारण यह है कि आप बिट-टिडलिंग हैं।

C में एक उदाहरण लेने के लिए (क्योंकि यदि C किसी चीज़ के लिए अच्छा है, तो यह बिट-ट्विडलिंग के लिए अच्छा है), कहते हैं कि कुछ निम्न-स्तरीय प्रारूप एक बाइट में 2-बिट और 6-बिट संख्या को एन्कोड करता है xx yyyyyy:

main() {
    unsigned char codevalue = 0x94; // 10 010100
    printf("x=%d, y=%d\n", (codevalue & 0xc0) >> 6, (codevalue & 0x3f));
}

पैदा करता है

x=2, y=20

ऐसी परिस्थिति में, हेक्स में स्थिरांक लिखना उन्हें दशमलव में लिखने से कम भ्रमित नहीं करता है, क्योंकि एक हेक्स अंक बड़े करीने से चार बिट्स (आधा बाइट; एक 'कुतरना') से मेल खाता है, और दो से एक बाइट: संख्या 0x3fसभी बिट्स है; कम कुतरना में सेट, और उच्च कुतरना में सेट दो बिट्स।

आप यह भी लिख सकते हैं कि अष्टक में दूसरी पंक्ति:

printf("x=%d, y=%d\n", (codevalue & 0300) >> 6, (codevalue & 077));

यहां, प्रत्येक अंक तीन बिट्स के ब्लॉक से मेल खाती है। कुछ लोगों को यह सोचना आसान लगता है, हालांकि मुझे लगता है कि यह इन दिनों काफी दुर्लभ है।


एक अन्य उदाहरण "मैजिक नंबर" 0xDEADBEEF का उपयोग हो सकता है। इस पोस्ट को देखें stackoverflow.com/questions/5907614/0xdeadbeef-vs-null
Etsitpab Nioliv

45

जब मैं बिट्स की परवाह करता हूं तो मुख्य कारण मैं अलग-अलग ठिकानों का उपयोग करता हूं।

इसे पढ़ना बहुत आसान है

int mask=0xFF;
byte bottom_byte = value & mask;

से

int mask=255;
byte bottom_byte = value & mask;

या कुछ और जटिल छवि

int mask=0xFF00FF00;
int top_bytes_by_word = value & mask;

की तुलना में

int mask=4278255360; //can you say magic number!? 
int top_bytes_by_word = value & mask;

यह बहुत स्पष्ट है कि हेक्स उदाहरणों के साथ क्या इरादा है क्योंकि हेक्स मूल रूप से बाइनरी का एक अधिक कॉम्पैक्ट रूप है ... इसके विपरीत, बेस -10 (जो हम उपयोग करते हैं) लगभग बाइनरी के रूप में अच्छी तरह से मैप नहीं करता है।

0xFF = b11111111 = 255
0xFFFF = b1111111111111111 = 65536
0xF0F0 = b1111000011110000 = 61680

कुछ अन्य आधार भी हैं जिनका आप कुछ भाषाओं में उपयोग कर सकते हैं। आपको बाइनरी, हेक्स और दशमलव के अलावा अन्य ठिकानों का बहुत कम उपयोग मिलेगा। कुछ अजीब लोग अभी भी अष्टाधारी का उपयोग करते हैं, लेकिन यह सबसे अधिक गूढ़ है जिसके बारे में आप एक संत कार्यक्रम में देखेंगे।


2
अष्टक दुर्लभ नहीं है, 0 अष्टक है :) (देखा कि स्टैक एक्सचेंज नेटवर्क पर कहीं, यह अब नहीं मिल सकता है)।
गेरिट

2
@ एर्लज़: बहुत सारी उंगलियों वाले लोग। :-)
ब्रायन ओकले

3
26 x 2 + 10 = सभी पूँजी और निम्न-केस के अक्षर और सभी संख्याएँ। वास्तव में असामान्य नहीं है। मैंने बेस 36 का उपयोग भी देखा है, जो कि केवल गैर-केस-संवेदी संस्करण है।
डारेल हॉफमैन

3
@ स्वास्तिक: एक घंटे में 60 मिनट और एक मिनट में 60 सेकंड है क्योंकि लोग बेस -60 सिस्टम का उपयोग कर रहे थे, न कि दूसरे तरीके से। मुझे आशा है कि आपको विश्वास नहीं होगा कि प्रकृति में कुछ ऐसा है जो कहता है कि एक घंटे में 60 मिनट होने चाहिए!
जोरेन

1
हां, उन्होंने इसे तारों में पढ़ा और उन्होंने समय को मापने के लिए बेस -60 का इस्तेमाल किया। 360 दिनों (= 6x60) के साथ एक वर्ष यह बेस -60 में समय को मापने के लिए पागल नहीं है।
ytg

8

जैसा कि आप शायद जानते हैं, कंप्यूटर बाइनरी पर आधारित हैं - यह आधार 2 है।

यह है आसान आधार 2 और 4, 8 और 16 (और 2 के समान गुणकों), और स्रोत कोड में इस अनुवाद के बारे कारण के लिए एक बहुत आसान संख्या के साथ काम कर सकते हैं रखने के बीच परिवर्तित करने के लिए।

असेंबली और सी जैसी निम्न स्तर की भाषाओं के लिए, यह सीधे प्रोसेसर के संचालन में अनुवाद कर सकता है (उदाहरण के लिए विभाजन और गुणा के लिए बिट शिफ्टिंग), जिसका अर्थ है कि इन संख्या अड्डों का उपयोग करना बहुत तेज कोड के साथ समाप्त होता है।

इसके अतिरिक्त, सभी ऑपरेशन संख्यात्मक ऑपरेशन नहीं होते हैं - ऐसे बिट मैप होते हैं जहां आपको सीधे बिट्स के साथ फिडेल करने की आवश्यकता होती है - ऐसा करने के लिए बेस 2 या एक के गुणकों का उपयोग करने से ऑपरेशन बहुत आसान हो जाता है।

यदि आप और अधिक सीखना चाहते हैं, तो मैं चार्ल्स पेटज़ोल्ड द्वारा कोड पढ़ने की सलाह देता हूं ।


3
संकलक एक लानत नहीं देता है। हालांकि, आपके द्वारा सूचीबद्ध आधारों के बीच रूपांतरण करना वास्तव में आसान है, आधार 10 के लिए एक सरल (धीमा-ईश) रूपांतरण विशेष रूप से कठिन नहीं है, और संकलक निर्माण के लिए उपयोगी अधिकांश भाषाएं (आप उसके लिए विधानसभा का उपयोग नहीं करते हैं) रूपांतरण उनके मानक पुस्तकालय में उपलब्ध है, इसलिए यह संकलक के लिए प्रभावी रूप से मुफ़्त है।

1
C में हेक्साडेसिमल का उपयोग तेज कार्यक्रमों में अनुवाद नहीं करता है। संकलक परवाह नहीं करता है कि आप किस आधार का उपयोग करते हैं।
चार्ल्स साल्विया

5
कोई फर्क नहीं पड़ता कि कार्यक्रम में किस आधार पर लिखा गया है, संकलक इसे संकलन समय पर बाइनरी में अनुवाद करता है। विधानसभा निर्देश समान हैं।
कार्ल बेज़ेलफेल्ट

2
एंटरप्राइज़ कंप्यूटर वास्तव में त्रिकोणीय एरीयन बूल पर आधारित होते हैं: सच, गलत और "फ़ाइल नहीं मिली"
मार्टिन बेकेट


4

अत्यधिक विशिष्ट कार्यक्रमों के बाहर, 10, 16 या 2 के अलावा अन्य ठिकानों का उपयोग करना बहुत दुर्लभ है।

बेस 16 (हेक्साडेसिमल) केवल इसलिए उपयोगी है क्योंकि एक बाइट (0-255) की पूरी श्रृंखला को दो अंकों (0x00-0xFF) में दर्शाया जा सकता है, जो कच्चे हेक्स-डंप या बाइनरी डेटा के साथ काम करना बहुत आसान बना सकता है। बिटकॉइन ऑपरेटरों के साथ बिट मास्क का उपयोग करते समय हेक्साडेसिमल भी उपयोगी होता है, क्योंकि बाइट पत्राचार के लिए दो अंक पठनीयता में मदद करता है।

अधिक शायद ही कभी, बेस 2 (बाइनरी) का उपयोग बिटवाइज़ ऑपरेशंस के साथ भी किया जा सकता है, लेकिन कई प्रोग्रामिंग लैंग्वेज बेस -2 लीटर का समर्थन नहीं करते हैं, और वैसे भी हेक्साडेसिमल बहुत अधिक संक्षिप्त और पठनीय है।

बेस -8 (ऑक्टल) का उपयोग कभी-कभी UNIX फ़ाइल अनुमतियों के कारण भी किया जाता है। इसके अलावा, अत्यधिक विशिष्ट गणितीय संदर्भों के बाहर 10 के अलावा अन्य ठिकानों का उपयोग करना बहुत दुर्लभ है।


ऑक्टल का उपयोग अक्सर चरित्र मूल्यों को निर्दिष्ट करने के लिए और कभी-कभी द्विआधारी डेटा को डंप करने के लिए किया जाता है।
कालेब

3

अन्य आधारों का उपयोग करने के लिए सबसे आम वैध कारण यह है कि आधार 2 में रूपांतरण में आसानी होती है: आठ या सोलह की छोटी तालिका को याद करके कैलकुलेटर का उपयोग किए बिना आधार -8 या आधार -16 संख्या को द्विआधारी में परिवर्तित करना तुच्छ है। संख्या:

 0000 0     0001 1     0010 2     0011 3
 0100 4     0101 5     0110 6     0111 7

 1000 8     1001 9     1010 A     1011 B
 1100 C     1101 D     1110 E     1111 F

यह कई संभावनाओं को खोलता है:

  • जब कोई संख्या सार्थक बाइनरी संख्याओं की संरचना का प्रतिनिधित्व करती है, तो आप कंप्यूटर के बिना व्यक्तिगत घटकों को निर्धारित कर सकते हैं। उदाहरण के लिए यदि एक 24 बिट संख्या आरजीबी में एक रंग का प्रतिनिधित्व करता है, यह बताने के लिए कि मामूली बात है 0xFF00FFहै मैजंटा (लाल + ब्लू); जब आप प्रस्तुत किए जाते हैं तो कार्य बहुत कठिन होता है16711935
  • जब कोई संख्या एक बिट मास्क का प्रतिनिधित्व करती है, तो इसे कॉम्पैक्ट हेक्स संख्या के रूप में लिखना अधिक व्यावहारिक होता है, बजाए एक अधिक लंबी बाइनरी संख्या के
  • कुछ आर्किटेक्चर अपने द्विआधारी कोड को पढ़ने के लिए आसान बनाने के लिए अपने रास्ते से बाहर चले गए जब अष्टक संख्याओं के रूप में मुद्रित किया गया। पीडीपी -11 एक ऐसी प्रणाली थी: सबसे महत्वपूर्ण बिट आपको 16-बिट्स से 8-बिट संचालन बताएगा; अंतिम दो अष्टक समूह आपको ऑपरेशन में शामिल दो रजिस्टरों को बताएंगे, और इसी तरह। मैं ऐसे कई लोगों को जानता था जो पीडीए -11 बाइनरी कोड को बिना डिस्स्क्लेमर के स्क्रीन पर पढ़ सकते थे, लेकिन उन्हें ऑक्टल सिस्टम में प्रिंट होने के लिए मशीन कोड की आवश्यकता थी।

2

कंप्यूटर (या अधिक सटीक रूप से संकलक) वास्तव में इस बात की परवाह नहीं करता है कि आप अपने स्रोत कोड में किस संख्या के आधार का उपयोग करते हैं। अधिकांश आमतौर पर उपयोग की जाने वाली प्रोग्रामिंग भाषाएं सीधे आधार 8 (ओक्टल), 10 (दशमलव) और 16 (हेक्साडेसिमल) का समर्थन करती हैं। कुछ भी आधार 2 (बाइनरी) संख्याओं के लिए प्रत्यक्ष समर्थन को स्पोर्ट करते हैं। विशिष्ट भाषाएं अन्य संख्या आधारों का भी समर्थन कर सकती हैं। ("सीधे समर्थन" से मेरा मतलब है कि वे स्रोत कोड में गणितीय ट्रिक जैसे बिट्स शिफ्टिंग, गुणन, विभाजन आदि का सहारा लिए बिना उस आधार में अंकों के प्रवेश की अनुमति देते हैं। उदाहरण के लिए, C सीधे आधार -16 को इसके साथ समर्थन करता है।0xसंख्या उपसर्ग और 0123456789ABCDEF का नियमित षोडश आधारी अंक। अब, इस तरह के ट्रिक्स संदर्भ में समझने के लिए संख्या को आसान बनाने के लिए उपयोगी हो सकते हैं, लेकिन जब तक आप उनके बिना एक ही संख्या व्यक्त कर सकते हैं, तब तक ऐसा करना - या नहीं - केवल एक सुविधा है।)

हालांकि, अंत में, यह असंगत है। मान लें कि आपके पास इस तरह का एक बयान है:

int n = 10;

अभिप्राय एक पूर्णांक चर बनाने और दशमलव संख्या के साथ आरंभ करने से है। कंप्यूटर क्या देखता है?

i  n  t     n     =     1  0  ;
69 6e 74 20 6e 20 3d 20 31 30 3b (ASCII, hex)

संकलक इसे टोकन देगा, और महसूस करेगा कि आप intनाम के साथ एक प्रकार का चर घोषित कर रहे हैं n, और इसे कुछ प्रारंभिक मान असाइन करें। लेकिन वह मूल्य क्या है?

कंप्यूटर के लिए, और बाइट के आदेश और संरेखण मुद्दों की अनदेखी करते हुए, चर के प्रारंभिक मूल्य के लिए इनपुट है 0x31 0x30। इसका मतलब यह है कि प्रारंभिक मूल्य 0x3130 (बेस 10 में 12592) है? बिलकूल नही। भाषा पार्सर को इस्तेमाल किए गए चरित्र एन्कोडिंग में फ़ाइल को पढ़ना जारी रखना चाहिए, इसलिए यह 1 0एक बयान टर्मिनेटर द्वारा पढ़ा जाता है। चूँकि इस भाषा में आधार 10 को माना जाता है, यह "0 वाले, 1 दसवें, अंत" के रूप में पढ़ता है। यानी 10 दशमलव का मान।

यदि हम हेक्साडेसिमल में एक मान निर्दिष्ट करते हैं, और हमारी भाषा 0xयह निर्दिष्ट करने के लिए उपयोग करती है कि निम्न मान हेक्साडेसिमल में है, तो हमें निम्नलिखित मिलते हैं:

i  n  t     n     =     0  x  1  0  ;
69 6e 74 20 6e 20 3d 20 30 78 31 30 3b (ASCII, hex)

संकलक 0x(0x30 0x78) देखता है और पहचानता है कि बेस -16 उपसर्ग के रूप में है, इसलिए इसके पीछे एक वैध आधार -16 संख्या की तलाश है। स्टेटमेंट टर्मिनेटर तक, यह पढ़ता है 10। यह 0 "लोगों", 1 "सिक्सटेंस" का अनुवाद करता है, जो बेस 10. में 16 तक काम करता है या बेस 2 में 00010000 है। या फिर इसके अलावा आप इसका प्रतिनिधित्व करना पसंद करते हैं।

या तो मामले में, और सादगी के लिए अनुकूलन की अनदेखी करते हुए, संकलक एक intप्रकार के चर के मूल्य को रखने के लिए पर्याप्त भंडारण आवंटित करता है , और वहाँ स्रोत मूल्य से कुछ प्रकार के अस्थायी धारण चर में पढ़ा मूल्य रखता है। यह तब (संभवतः बाद में) वस्तु कोड फ़ाइल में परिणामी बाइनरी मान लिखता है।

जैसा कि आप देखते हैं, जिस तरह से आप स्रोत कोड में संख्यात्मक मान लिखते हैं, वह पूरी तरह से असंगत है। संकलित समय पर इसका बहुत मामूली प्रभाव हो सकता है , लेकिन मुझे लगता है कि (फिर, ऑपरेटिंग सिस्टम द्वारा डिस्क कैशिंग जैसे अनुकूलन को अनदेखा करते हुए) डिस्क के घूर्णन प्लैटर्स, डिस्क एक्सेस टाइम, डेटा बस डिवीजनों के आसपास यादृच्छिक अशांति जैसी चीजें , आदि, एक बहुत अधिक प्रभाव है।

नीचे पंक्ति: इसके बारे में चिंता मत करो। संख्याओं को एक आधार में लिखें जिसे आपकी पसंद की प्रोग्रामिंग भाषा समर्थन करती है और जो इस बात के लिए समझ में आता है कि संख्या का उपयोग कैसे किया जाएगा और / या पढ़ें। आपने इस उत्तर को पढ़ने में अधिक समय बिताया है क्योंकि आप कभी भी संकलन समय में ठीक हो जाएंगे कि स्रोत कोड में किस संख्या के आधार का उपयोग करना है। ;)


1

क्यों कोई भी बेस 10 के अलावा किसी आधार में संख्याओं को प्रोग्राम करने के लिए अपने रास्ते से बाहर चला जाएगा।

यहां कुछ ऐसे कारण बताए गए हैं जो पहले से ही सामने नहीं आए ...

x00 - कुछ OS और हार्डवेयर उपकरणों के API से तर्क हेक्स / बाइनरी में होने की उम्मीद है। जब आप ऐसे API के लिए कोड बनाते हैं, तो संख्याओं को उसी प्रारूप में उपयोग करना आसान होता है, क्योंकि API विभिन्न आधारों के बीच परिवर्तित करने के बजाय अपेक्षा कर रहा है। उदाहरण के लिए, किसी सर्वर को संदेश बाइट का अंत भेजने के लिए या संचार चैनल से कनेक्शन बंद करने के लिए संदेश भेजने के लिए।

x01 - आप चाहते हैं कि आपका एप्लिकेशन कुछ कीबोर्ड जैसे कॉपीराइट साइन (\ u00a9) पर उपलब्ध वर्णों का प्रतिनिधित्व न करे।

x02 - विभिन्न संस्कृति सेटिंग्स में कुछ स्थिरांक / शाब्दिक (नेत्रहीन) बने रहते हैं, विशेष रूप से जब स्रोत कोड / फाइल को विभिन्न स्थानीय सेटिंग्स के साथ डेवलपर्स में ले जाया जाता है।

x03 - उनके कोड को भ्रामक और जटिल दिखाने के लिए - अच्छी बात यह है कि C # ऑक्टल स्थिरांक का समर्थन नहीं करता है!


1

मुख्य मुद्दा उचित तरीके से कंप्यूटर आकार के एक शब्द का प्रतिनिधित्व कर रहा है। 6502 एक 8 बिट प्रोसेसर था। 4004 एक 4 बिट प्रोसेसर था।

जब एक 4 या 8 बिट संख्या के साथ काम अच्छी तरह से काम करता है। एक 4 बिट संख्या एक एकल हेक्साडेसिमल वर्ण है। एक 8 बिट संख्या (एक बाइट) दो हेक्स अंक है। जिन प्रणालियों में 2 आकार के शब्द की शक्ति होती है, वे आज सामान्य रूप से देखे जाने वाले मानक हैं - 16 बिट, 32 बिट, 64 बिट। ये सभी हेक्साडेसिमल के रूप में प्रतिनिधित्व के लिए 4 अच्छी तरह से विभाजित करते हैं।

ऑक्टल (आधार 8) का उपयोग उन प्रणालियों में किया गया था जहां शब्द का आकार 12, 24 या 36 था। पीडीपी 8, आईबीएम मेनफ्रेम और आईसीएल 1900 के पुराने दिनों में इनका इस्तेमाल किया गया था। इन शब्दों को हेक्साडेसिमल की एक सीमित सीमा के बजाय ओकटेट का उपयोग करके अधिक आसानी से दर्शाया गया था (हाँ, वे 4 में भी विभाजित होते हैं)।

जाहिरा तौर पर आधार 8 नंबरिंग का उपयोग करने के साथ एक लागत बचत भी थी। बीसीडी में 12 बिट्स का प्रतिनिधित्व करते हुए, पहला अंक केवल 0-4 हो सकता है, लेकिन दूसरा, तीसरा और चौथा 0-9 हो सकता है। यदि यह हेक्स के रूप में किया गया था, तो एक में 3 हेक्स वर्ण हैं, लेकिन प्रत्येक में 16 संभावित मान हैं। यह एक निक्सी ट्यूब का उत्पादन करने के लिए सस्ता था जिसमें केवल 0-4 था जिसमें 0-9 (बीसीडी के लिए अतिरिक्त तर्क के साथ) या हेक्साडेसिमल के लिए 0-एफ था।

एक अभी भी ऑक्टल को यूनिक्स फ़ाइल अनुमतियों (755, 644) के साथ देखता है जहां मालिक, समूह और दुनिया में प्रत्येक के पास 3 बिट्स हैं जो अनुमतियों का प्रतिनिधित्व करते हैं।


गणित की दुनिया में, एक व्यक्ति कभी-कभी कुछ अजीब चीजों को अलग-अलग आधारों के साथ करता है। उदाहरण के लिए, प्रोजेक्ट यूलर 396 से एक कमजोर गूडस्टेन अनुक्रम ... या पैलंड्रोमिक संख्याओं के साथ कुछ सरल । आधार N में एक संख्या की संपत्ति है जो एक संख्या है जो कि N - 1 का गुणक है और इसके अंक N - 1 के गुणक तक होंगे । फुटरमोर, यदि N - 1 एक पूर्ण वर्ग है, तो यह संपत्ति sqrt ( N - 1 ) के लिए भी मौजूद है । कुछ गणितीय समस्याओं में इसके कुछ अनुप्रयोग हैं।


1
ऑक्टल इसलिए था क्योंकि पीडीपी में 9/18 बिट बाइट्स थे, एक ऑक्टल नंबर 3 बिट्स का प्रतिनिधित्व करता है, यदि आप बाइट 3 से विभाज्य हैं तो यह बहुत मायने रखता है
मार्टिन बेकेट

1
ऑक्टल का उपयोग कुछ 16-बिट सिस्टम (विशेष रूप से पीडीपी -11) पर भी किया गया था, क्योंकि 15 - साइन बिट को छोड़कर बिट्स की संख्या - अच्छी तरह से 3 में विभाजित होती है। इसका उपयोग मूल यूनिक्स ऑपरेटिंग सिस्टम में व्यापक रूप से किया गया था (उदाहरण के लिए: "ओड" बाइनरी फ़ाइलों को डंप करने के लिए मानक उपकरण है, और इसका डिफ़ॉल्ट प्रारूप केवल 8-बिट हेक्स के बजाय 16-बिट ऑक्टल है), केवल अनुमतियों के लिए नहीं। यह भी प्रासंगिक हो सकता है कि पीडीपी -11 निर्देश सेट में दो 6-बिट ऑपरैंड फ़ील्ड थे।
रैंडम 832

ऑक्टल का भी उपयोग किया गया था क्योंकि यह उस समय तकनीक पर प्रदर्शित हो सकता था। Nexi ट्यूब, कोई भी? या अन्य 0-9 प्रदर्शित करता है? इसे दिखाने के लिए वायुसेना के प्रदर्शन में थोड़ी देर लगी।
जेरेमी जे स्टारचेर

1

वित्तीय उद्योग में, एक पहचानकर्ता योजना है जो प्रभावी रूप से आधार 36 है । यह 0-35 के अंकों का प्रतिनिधित्व करता है और 0-35 के अंकों का प्रतिनिधित्व करता है। यह किसी भी अप्रिय नाम को उत्पन्न होने से रोकने के लिए स्वरों को छोड़ देता है।

यह सही नहीं है, हालांकि। एक समय था जब एक दुर्भाग्यपूर्ण कंपनी की आईडी थी B000BZ


1

कारण # 1: क्योंकि सर्किट स्तर पर सभी संख्याओं को बेस -2 (विद्युत स्विच चालू या बंद) में दर्शाया गया है। कारण # 2: क्योंकि वास्तविक सर्किट की तुलना में एक स्तर अधिक होने पर, बिट्स को बाइट्स में वर्गीकृत किया जाता है, और बाइट्स को आसानी से दो हेक्साडेसिमल अंकों के रूप में दर्शाया जा सकता है, जब यह सभी मानों का प्रतिनिधित्व करने के लिए 3 दशमलव अंक (और कुछ सत्यापन) लेगा। बाइट।

इसलिए, यदि आप इन स्तरों पर काम कर रहे हैं (या कुछ प्रबंधित वातावरण में उन्हें अनुमान लगा रहे हैं), तो दशमलव की तुलना में बाइनरी या हेक्साडेसिमल में काम करना आसान है। जिन स्थितियों में आप ऐसा करेंगे वे विविध हैं, लेकिन आमतौर पर कभी भी ऐसी परिस्थितियां नहीं होती हैं जहां आपको मूल अंकगणित की आवश्यकता होती है।


1

एक क्षेत्र जहां आधार 16 (हेक्साडेसिमल) संख्याओं का उपयोग बहुत बार किया जाता है, रंग को निर्दिष्ट करने में होता है, विशेष रूप से वेब के लिए HTML / CSS का उपयोग करते समय। डिजिटल डिस्प्ले पर हमारे द्वारा उपयोग किए जाने वाले रंगों को 3 "बेस" रंगों (RGB (लाल, हरा, नीला) के लिए 3 तीव्रता मानों के संयोजन का उपयोग करके निर्दिष्ट किया जाता है, जिन्हें 16 मिलियन डिस्प्ले योग्य रंगों में से किसी एक को बनाने के लिए एक साथ मिश्रित किया जाता है (24-बिट रंग का उपयोग करके) )।

उदाहरण के लिए, हेक्स में पूर्ण तीव्रता हरी 0x00ff00और 65280दशमलव में होगी। अब अपने सिर में एक रंग को "मैन्युअल रूप से" मिश्रण करने की कोशिश करें जिसमें समान भाग लाल और नीले रंग के हों, आधी तीव्रता पर कहें, एक अच्छा बैंगनी बनाने के लिए :) हेक्स में यह बस 0x800080उसी तरह लिखा जाएगा जबकि इसके लिए दशमलव मान होगा 8388736। ग्रे के रंगों के साथ काम करते समय यह और भी आसान हो जाता है - 50% ग्रे 0x808080(हेक्स) और 8421504(दशमलव), 75% 0xC0C0C0और 12632256, और इसी तरह।

हेक्स का उपयोग करना बहुत अधिक सहज है और रंग के इस उपयोग से परिचित कोई भी तुरंत हेक्स मूल्य को देखते हुए रंग को "अनुमान" कर पाएगा। यदि आप एक ही रंग को कई बार (जो आमतौर पर मामला है) का उपयोग करने की आवश्यकता होती है, तो यह बहुत कम त्रुटि वाला प्रवण होता है।

हेक्स उपयोग की एक पागल राशि के लिए किसी भी वेब पेज (और विशेष रूप से सीएसएस) देखें: डी

नोट: सीएसएस में हेक्स मानों को एक #उपसर्ग का उपयोग करके लिखा जाता है , उदाहरण के लिए: #00ff00हरे रंग के लिए, और कभी-कभी इसे केवल तीन अंकों तक छोटा किया जाता है, जैसे कि #0f0हरे रंग के लिए।


0

कुछ एल्गोरिदम के लिए, बेस 2 कुछ और की तुलना में अधिक समझ में आता है। उदाहरण के लिए, क्या आप बाइनरी ट्री, या 10-एरी ट्री को पार करने के लिए फ़ंक्शन लिखेंगे?

लेकिन, अधिक बार, बेस 2 का उपयोग किया जाता है, क्योंकि कंप्यूटर लगभग सार्वभौमिक रूप से उनकी संख्या का प्रतिनिधित्व करता है। इस का मतलब है कि:

  • कई ऑपरेशन बेस 2 में अधिक कुशल हैं:
    • 2 का गुणन, विभाजन और मोडुलो शक्तियाँ सामान्य विभाजन की तुलना में बहुत तेज़ हैं
    • झंडे और छोटे मूल्य एक बड़ी संख्या के बाइनरी अंकों के रूप में अधिक कुशलता से संग्रहीत, पुनर्प्राप्त, और हेरफेर किए जा सकते हैं।
  • डेटा फ़ाइलों और नेटवर्क डेटा धाराओं को पढ़ने, लिखने और हेरफेर करने वाले संचालन को इस तथ्य से सीधे निपटना होगा कि उन्हें बाइनरी नंबर के रूप में दर्शाया गया है।

इसके अलावा, वहाँ हमेशा दुर्लभ अनुप्रयोग है कि स्वाभाविक रूप से एक विषम आधार की आवश्यकता है जो न तो 2 या 10 हो सकता है।


2
बेशक मैं एक 10-एरी ट्री का उपयोग करता हूं। यह अजीब 2चरित्र क्या आप उपयोग कर रहे हैं?
कोडइन्चोस

0

यह ईमानदारी से वरीयता है, अगर किसी कारण से आपको पॉलीडेक्टली मिला है और 11 उंगलियां हैं या अपने पैर की उंगलियों की गिनती पसंद है तो आप बेस 20 में काम करना पसंद करते हैं यह ईमानदारी से आपके ऊपर है। लेकिन यह महसूस करें कि एक सार्वभौमिकता विषय पर, हममें से अधिकांश को दैनिक आधार पर बिट्स और बाइट्स से निपटना पड़ता है, अगर हमें ऐसा कुछ मिलता है जो आधार 19 में थोड़ा हेरफेर कर रहा है।

बेस x के लिए जवाब

बेस 10 - हमारे सभी सामानों के मॉडल क्योंकि हमें 10 गिनती के अंक मिले हैं (पैर अजीब और बदबूदार हैं इसलिए हम उन का उपयोग नहीं करते हैं)।

बेस 2 - कंप्यूटर बिट्स (ऑन / ऑफ) के लिए इसका उपयोग करते हैं यह पठनीय वोल्टेज स्तरों से संबंधित है जिसे गेट्स / ट्रांजिस्टर / कैपेसिटर द्वारा प्रचारित किया जा रहा है।

बेस 8 - पुराना, वापस जब कंप्यूटर सुपर विशाल नहीं थे (या वापस जब वे अंतरिक्ष वार थे) यह कुछ या अन्य के लिए अच्छा था (मुझे यह एक सा पसंद नहीं है)

बेस 16 - बिट हेरफेर के लिए एक बाइट के ऊपरी और निचले निबल्स दिखाने के लिए अच्छा है। यह एम्बेडेड / fpga / हार्डवेयर की दुनिया में सुपर उपयोगी है।

कंप्यूटर में सामान्य आधार

वरीयता के साथ जाने के लिए, मैं आपको ठीक-ठीक बता सकता हूं कि "पर" एक रंग एक हेक्स आरजीबी मूल्य में है जो मुझे दिया गया है, इसके परिणामस्वरूप हार्डवेयर में एक ही इंट में प्रतिनिधित्व किया जा सकता है और फिर कुछ बदलावों के साथ मुझे वापस दिया जा सकता है। आसान-मटर, 1 जटिल रंग = 1 डेटा बिंदु जो कि सीमित मेमोरी के साथ बड़ी छवि प्रसंस्करण के लिए अच्छा है। तुलना करें कि आधार 10 प्रतिनिधित्व के लिए, आप उन सभी को जोड़ सकते हैं और उन्हें एक संख्या में संग्रहीत कर सकते हैं, लेकिन कौन सी संख्या है, या शायद R का समय 10000 है, G 100 है, और B का अपना स्थान है, यह बहुत सारा गणित कार्य है , आमतौर पर गुणन में एक शिफ्ट की तुलना में अधिक चक्रों का खर्च होता है, इसलिए आपका अगला डेटा टुकड़ा आपके अंतिम टुकड़े के संसाधित होने से पहले ही कतार में हो जाता है, वूप्स, जो अब चला गया है।

कभी-कभी आधार 2, 8 या 16 में काम करना बेहतर होता है। अधिकांश मशीनों के साथ 2 से गुणा करना बस थोड़ी सी शिफ्ट है, वे सुपर स्पीडी हैं, 2 से विभाजित के साथ।

बिट ट्विडलिंग के विचार पर और भी विस्तार करने के लिए। एम्बेडेड वातावरण में काम करते समय बड़ी संख्या में होते हैं जो मुझे कुछ सरणी रोशनी, स्विच, या कुछ अन्य पंजीकृत मैप्ड आइटम तक पहुंचने की आवश्यकता होती है।

इस स्थिति में, प्रत्येक स्विच पर एक संपूर्ण चार, बाइट या इंट को असाइन करना दोनों ही अक्षम और मूर्खतापूर्ण होगा, एक स्विच या लाइट में 2 स्थान हैं - पर और बंद - मैं ऐसा कुछ क्यों असाइन करूंगा जिसमें 256 स्थान तक हो, या 2 ^ 16 पदों आदि की एक सरणी में प्रत्येक प्रकाश एक शब्द / रजिस्टर पर 1 बिट फिटिंग 8 या 16 या 32 या 64 या 128 (आपके डेटाटाइप की चौड़ाई) हो सकता है। अंतरिक्ष दक्षता की जरूरत है और बल्कि स्वागत है।

आरजीबी डेटा, सिग्नल डेटा के बहुत सारे - जीपीएस, ऑडियो, एएससीआई, आदि जैसे चीजों के लिए प्रोग्रामिंग में बेस 2 ^ एन का उपयोग करना - हेक्स, बाइनरी और ऑक्टल में बहुत सरल है क्योंकि यह मशीन और एक में प्रतिनिधित्व करता है। अधिक आसानी से समझ में क्या प्रस्तुत किया जा रहा है और इसे कैसे हेरफेर करना है।

STRING का उपयोग करें

जब तक आप इसके लिए कोड नहीं देते तब तक कोई दक्षता नहीं है। आपको आधार 11 चाहिए, आपने इसके लिए एक डेटा-प्रकार सेट किया है और उपयोगकर्ता के लिए इसके प्रतिनिधित्व को संभालने के लिए किसी भी ऑपरेटर को अधिभारित किया है। मुझे कोई कारण नहीं है कि 5 वस्तुओं को रखने वाली प्रणाली, और केवल 5 वस्तुओं के गुणक धारण करने के लिए पांच आइटम गणित में बदलने की आवश्यकता होगी। और आगे, आप बेहतर प्रार्थना करेंगे कि जिस व्यक्ति ने आधार 271 के लिए अपना कोड लिखने का फैसला किया है, वह इसे अच्छी तरह से प्रलेखित करे या आप यह समझने में अधिक समय बिता सकें कि आधार 271 बनाने के लायक है क्योंकि सभी आइटम 271 से अधिक हैं।


0

कंप्यूटर के प्राचीन दिनों में, हमारे पास कई डिस्प्ले थे जो अंकों को 0-9 दिखा सकते थे, लेकिन हमारे पास अभी तक AF नहीं था।

http://ad7zj.net/kd7lmo/images/ground_nixie_front.jpg ऐसा ही एक उदाहरण है ...

ऑक्टल इन डिस्प्ले पर अच्छी तरह से फिट होता है और बाइनरी या दशमलव की तुलना में आसान था।


0

मुझे आश्चर्य है कि अन्य सभी जवाबों ने वैकल्पिक आधारों के लिए कंप्यूटिंग में दो बहुत सामान्य उपयोगों का उल्लेख नहीं किया है:

  1. एन्कोडिंग : उदाहरण के लिए Base64 एन्कोडिंग बेहद आम है। एन्कोडिंग बस बाइट्स की एक श्रृंखला को एक बड़े बाइनरी (बेस -2) नंबर के रूप में व्याख्या करता है और उस संख्या को ASCII अंकों द्वारा दर्शाए गए बेस 64 नंबर में परिवर्तित करता है।
  2. संपीड़न : प्रतिनिधित्व को छोटा करने के लिए एक बड़े आधार में बाइनरी, दशमलव या हेक्स संख्या का प्रतिनिधित्व करना अक्सर वांछनीय होता है। उदाहरण के लिए, bit.ly जैसे सभी बिट शॉर्टर्स ऐसा कर रहे हैं। या आप किसी URL में उपयोग के लिए GUID को छोटा करने के लिए कर सकते हैं।

    - 821F6321-881B-4492-8F84-942186DF059B (base-16 guid) 
    becomes
    - RRIDHW463YD8YXX7MIDI (base-36)
    - 3UFmaWDjj9lifYyuT0 (base-62)
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.