2012-01-27 24 views
6

मैं पूरी तरह प्रोग्रामिंग की गहरी समझ विकसित करने के लिए बहुत मेहनत कर रहा हूं। मैं "बाइनरी" की पाठ्यपुस्तक परिभाषा को समझता हूं, लेकिन जो मुझे समझ में नहीं आता है वह वास्तव में मेरे दिन-प्रतिदिन प्रोग्रामिंग पर कैसे लागू होता है?"बाइनरी" संख्याएं मेरे दैनिक प्रोग्रामिंग से कैसे संबंधित हैं?

"द्विआधारी संख्या" बनाम .. की अवधारणा .. अच्छी तरह से ... "नियमित" संख्या, अवधारणा को शोधने और समझने के मेरे सर्वोत्तम प्रयासों के बावजूद मुझ पर पूरी तरह से खो गई है।

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

यदि कोई मुझे अच्छे, ठोस व्यावहारिक शिक्षण संसाधन की दिशा में इंगित कर सकता है, या इसे यहां समझा सकता है, तो इसकी व्यापक सराहना की जाएगी।

मैं 'परिभाषा' (मैंने विकिपीडिया पेज को कुछ बार अब पढ़ा है) की तलाश नहीं कर रहा हूं, लेकिन इस बारे में कुछ और दिशा है कि मैं इस नए-ज्ञात ज्ञान को कैसे जोड़ सकता हूं कि वास्तव में बाइनरी संख्याएं क्या हैं मेरे दिन-प्रतिदिन प्रोग्रामिंग में, बिल्कुल भी। मैं मुख्य रूप से इन दिनों PHP में लिख रहा हूं, इसलिए उस भाषा के संदर्भ विशेष रूप से बहुत उपयोगी होंगे।

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

+6

कोई "दोहरे" या "नियमित" संख्या नहीं है, वहाँ सिर्फ संख्या हैं। बाइनरी एक संख्या का सिर्फ एक संभावित प्रतिनिधित्व है। – millimoose

+1

@Inerdial: हाँ यह सच है, लेकिन कुछ मामलों में एक प्रोग्रामर संख्या के द्विआधारी प्रतिनिधित्व के साथ काम करना चुन सकता है क्योंकि यह उसके उद्देश्यों को पूरा करता है। मुझे लगता है कि यह वही है जो ओपी सीखना चाहता है। –

+0

ज्ञान को दिन-प्रतिदिन प्रोग्रामिंग में शामिल करना, यह दिमाग में आता है: [PHP: बिटवाई ऑपरेटरों] (http://php.net/manual/en/language.operators.bitwise.php) –

उत्तर

11

बाइनरी पेड़ (आपके टैग में से एक), विशेष रूप से binary search trees, कुछ दैनिक प्रोग्रामिंग परिदृश्यों (जैसे सॉर्टिंग) के लिए व्यावहारिक हैं।

मौलिक सिद्धांतों की गणना करने के लिए बाइनरी संख्याएं आवश्यक हैं लेकिन उच्च स्तर की भाषाओं में शायद ही कभी उपयोग की जाती है।

बाइनरी संख्याएं सीमाओं को समझने में उपयोगी हैं, जैसे कि विभिन्न चौड़ाई (उदाहरण के लिए 32-बिट के लिए 2^32 - 1), या two's complement (आमतौर पर उपयोग की जाने वाली प्रणाली) के लिए सबसे बड़ी और छोटी हस्ताक्षरित संख्या। उदाहरण के लिए, सबसे छोटे हस्ताक्षर किए गए दो के पूरक 32-बिट संख्या -2^31 क्यों हैं लेकिन सबसे बड़ा 2^31 - 1? पहली नज़र में भी गंध, - (- 2^31) (सबसे छोटी संख्या को नकारना), खुद पैदा करता है। (संकेत, इसे 2-बिट संख्याओं के साथ आज़माएं, क्योंकि विश्लेषण समान है)।

दूसरा मूल information theory है। 10000 संभावनाओं का प्रतिनिधित्व करने के लिए मुझे कितने बिट्स की आवश्यकता है (लॉग 10000, गोलाकार)? यह क्रिप्टोग्राफी पर भी लागू होता है, लेकिन शायद आप उसमें अभी तक नहीं पहुंच रहे हैं।

रोजाना बाइनरी का उपयोग करने की अपेक्षा न करें, लेकिन इन और अन्य कारणों के लिए बुनियादी समझ विकसित करें।

यदि आप pack और बिटवाई ऑपरेटरों का पता लगाते हैं, तो आपको अन्य उपयोग मिल सकते हैं। विशेष रूप से, कई प्रोग्रामर नहीं जानते कि वे XOR का उपयोग कर सकते हैं (जिसे दो बाइनरी अंकों से जुड़े एक सत्य तालिका को देखकर समझा जा सकता है)।

+0

बिट-शिफ्ट और बिटवाई लॉजिकल ऑपरेटरों का उपयोग करने की कोशिश करते समय बाइनरी संख्याएं भी प्रासंगिक होती हैं। हालांकि, वे उच्च स्तरीय भाषाओं में बहुत कुछ नहीं आते हैं। – Brilliand

+3

हम्म ... मैं बाइनरी पेड़ के बारे में कुछ सीख रहा हूं, लेकिन अभी भी यह समझ में नहीं आता कि मैं उन्हें दिन में "उपयोग" कहूंगा। मेरा एक दोस्त यह उल्लेख कर रहा था कि वह "बाइनरी पेड़" के रूप में डेटाबेस का उपयोग कैसे करता है जिसमें पॉइंटर्स को स्थिर/कैश किए गए डेटा को कहीं और शामिल किया जाता है। मुझे लगता है कि मेरा भ्रम आंशिक रूप से यह पता लगाने की कोशिश कर रहा था कि वास्तव में क्या मतलब है;) आईई: एक बाइनरी पेड़ एक डेटा "प्रकार" या वास्तव में सिर्फ एक डेटा "अवधारणा" है। यद्यपि आपकी टिप्पणी के लिए धन्यवाद! मुझे लगता है कि समझदार होने के लिए, सबसे पहले मुझे खुद को पूरी तरह बेवकूफ महसूस करने की अनुमति है। –

+0

एक बाइनरी पेड़ जिसे एक [सार डेटा प्रकार] कहा जाता है (http://en.wikipedia.org/wiki/Abstract_data_type)। [TreeMap] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TreeMap.html) जैसे ठोस कार्यान्वयन हैं। यह उन कार्यक्रमों द्वारा रोज़ाना उपयोग किया जाता है जो वस्तुओं और संबंधित मूल्यों की एक क्रमबद्ध सूची रखना चाहते हैं। किसी भी समय किसी चीज को हल करने के बारे में सोचें। –

1

बल्कि बजाय एक अनुभव एक ठोस जवाब का अधिक:

वास्तव में, आप वास्तव में द्विआधारी की जरूरत नहीं है क्योंकि यह काफी प्रोग्रामिंग में निकाला गया है आजकल (आप क्या कार्यक्रम के आधार पर) है। सिस्टम डिजाइन और नेटवर्किंग में बाइनरी का अधिक उपयोग होता है।

कुछ बातें स्कूल में अपने सहयोगियों उनकी बड़ी कंपनियों में कार्य करें:

  • प्रोसेसर निर्देश सेट और संचालन (सेशन कोड)
  • नेटवर्किंग और डेटा प्रसारण
  • हैकिंग (विशेष रूप से स्मृति "छेड़छाड़" के और अधिक। हेक्स लेकिन अभी भी संबंधित)
  • स्मृति आवंटन (विधानसभा में, हम हेक्स का उपयोग, लेकिन कभी कभी द्विआधारी)

आपको यह जानने की जरूरत है कि मशीनों द्वारा इन "नियमित संख्याओं" का प्रतिनिधित्व और समझा जाता है - इसलिए उन सभी "रूपांतरण पाठ" जैसे हेक्स बाइनरी, बाइनरी से ऑक्टल आदि मशीनों को केवल बाइनरी पढ़ते हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद ... आप एक महत्वपूर्ण बिंदु पर क्रमबद्ध मारा है। मुझे शायद इस अवधारणा को अभ्यास में उपयोग करने की आवश्यकता नहीं होगी क्योंकि यह मेरी सभी पसंदीदा उच्च स्तरीय भाषाओं द्वारा पूरी तरह से बाहर निकाला गया है। मुझे लगता है कि मेरा लक्ष्य यहां इसका उपयोग नहीं करना है क्योंकि मुझे समझ में आता है कि मुझे इसका उपयोग करने की बजाय इसकी आवश्यकता नहीं है क्योंकि मुझे बिल्कुल पता नहीं है कि यह क्या है। मशीन कोड का आपका उल्लेख, मशीन से कोड से संबंधित ... जो मुझे बहुत समझ में आता है, आपके उत्तर के लिए धन्यवाद। –

0

एक वेब व्यक्ति के रूप में, आप निश्चित रूप से यूनिकोड के महत्व को समझते हैं। यूनिकोड को हेक्साइडसिमल प्रारूप में दर्शाया गया है जब चरित्र सेट को आपके सिस्टम द्वारा समर्थित नहीं किया जाता है। हेक्साइडसिमल आरजीबी मूल्यों और मेमोरी पतों में भी दिखाई देता है। हेक्साइडसिमल, कई चीजों के बीच, लंबे बाइनरी पात्रों को लिखने के लिए एक शॉर्टेंड है।

अंत में, बाइनरी संख्या सत्यता के आधार के रूप में काम करती है: 1 सत्य है, जबकि 0 हमेशा झूठा होता है।

डिजिटल फंडमेंटल्स पर एक पुस्तक देखें, और बूलियन तर्क पर अपना हाथ आज़माएं। आप फिर से उसी तरह if a and not b or c देखेंगे!

3

बाइनरी (बनाम नियमित) संख्याओं के दो उपयोग हैं।

शब्द नियमित की वजह से

, शायद नहीं:

  • बाइनरी कॉम्पैक्ट बाइट्स के रूप में जमा, का कहना है कि एक पूर्णांक के लिए 4 बाइट, एक डबल के लिए 8 बी। एसक्यूएल INT या DOUBLE है। पाठ के रूप में नियमित रूप से संग्रहीत, प्रति अंक बाइट। एसक्यूएल VARCHAR

लेकिन हमारे मामले में:

  • अलग नंबरिंग आधार में प्रतिनिधित्व: 101 द्विआधारी = 1 * 4 + 0 * 2 + 1 * 1 = 5.

इस के लिए खुद को उधार देता है हां/नहीं राज्यों के जटिल codings:

को देखते हुए 1 | x = 1 और 0 | x = x (या, द्विआधारी +) और 0 & x = 0 और 1 & x = x (और, द्विआधारी *)

$sex_male = 0: 
$sex_female = 1; 
$employee_no = 0*2; 
$employee_yes = 1*2; 
$has_no_email = 0*4; 
$has_email = 1*4; 

$code = $sex_female | $employee_no | $has_email; 

if (($code & $sex_female) != 0) print "female"; 
+2

इसे एक [बिटमास्क] (http://en.wikipedia.org/wiki/Bitmask) कहा जाता है, और मुख्य रूप से स्मृति-बाधित परिस्थितियों में उपयोग किया जाना चाहिए (यानी आमतौर पर PHP में नहीं)। –

+0

वास्तव में यह एक अच्छा मुद्दा है ... मुझे लगता है कि स्मृति-बाधित बैठकों को बेहतर ढंग से समझकर, मैं उच्च स्तर की अवधारणाओं को बेहतर ढंग से समझूंगा। मैं धीरे-धीरे अपने खाली समय में उद्देश्य-सी सीख रहा हूं, जिसने मुझे स्मृति उपयोग और अन्य अवधारणाओं पर गहराई से खोदने का कारण बना दिया है, जो अब तक मैं उच्च स्तर की भाषाओं पर निर्भरता के कारण थोक अप को अनदेखा कर सकता हूं। –

4

यहां आपकी समझ में मदद करने के लिए एक संक्षिप्त इतिहास है और मैं अंत में आपके प्रश्न पर पहुंच जाऊंगा।

बाइनरी थोड़ा अजीब है क्योंकि हम बेस 10 संख्या प्रणाली का उपयोग करने के लिए उपयोग किए जाते हैं। ऐसा इसलिए है क्योंकि मनुष्यों के पास 10 अंगुलियां होती हैं, जब वे भागते हैं तो उन्हें 10 अंगुलियों का प्रतिनिधित्व करने के लिए एक छड़ी, पैर की अंगुली या कुछ और उपयोग करना पड़ता था। यह सभी संस्कृतियों के लिए सच नहीं है, हालांकि, कुछ शिकारी गेटरर आबादी (जैसे ऑस्ट्रेलियाई आदिवासी) ने आधार 5 संख्या प्रणाली (एक हाथ) का उपयोग किया क्योंकि बड़ी संख्या में उत्पादन आवश्यक नहीं था।

वैसे भी, कंप्यूटिंग में बेस 2 महत्वपूर्ण कारण है क्योंकि एक सर्किट में दो राज्य, कम वोल्टेज और उच्च वोल्टेज हो सकता है; इस बारे में एक स्विच (चालू और बंद) की तरह सोचें। इन स्विचों में से 8 को एक साथ रखें और आपके पास 1 बाइट (8 बिट्स) है। बिट के बारे में सोचने का सबसे अच्छा तरीका 1 = ऑन और 0 = ऑफ है जो ठीक है कि इसे बाइनरी में कैसे दर्शाया जाता है। इसके बाद आपके पास इस 10011100 की तरह कुछ हो सकता है जहां 1 उच्च वोल्ट्स और 0 कम वोल्ट हैं। शुरुआती कंप्यूटरों में, भौतिक स्विच का उपयोग किया जाता था जिसे ऑपरेटर प्रोग्राम बनाने के लिए चालू और बंद कर सकता था।

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

+0

धन्यवाद जैक्स, यह मेरे लिए बहुत उपयोगी है। मैं मानता हूं कि शायद मैं वास्तव में इसका कभी भी उपयोग नहीं करूंगा, लेकिन मुझे लगता है कि निम्न स्तर की अवधारणाओं को सीखना हमेशा मुझे उच्च स्तर की अवधारणाओं के साथ एक बड़ा सौदा करने में मदद करता है। –

1

पायथन के साथ आप कमांड लाइन के साथ bitwise संचालन और कुशलता का पता लगा सकते हैं। व्यक्तिगत रूप से मैंने पैकेट रेडियो में उपयोग किए जाने वाले अस्पष्ट संपीड़न एल्गोरिदम की जांच करने के लिए थोड़ा संचालन किया है।

2

मेरे लिए, संख्या का एक द्विआधारी प्रतिनिधित्व की सबसे बड़ी प्रभावों में से एक चल बिन्दु मूल्यों और के बीच अंतर है हमारे "साधारण" (आधार -10 या दशमलव) अंशों, दशमलव, और वास्तविक संख्याओं की धारणा।

अंशों का विशाल बहुमत बाइनरी में बिल्कुल प्रतिनिधित्व नहीं किया जा सकता है। 0.4 की तरह कुछ ऐसा लगता है कि यह प्रतिनिधित्व करने के लिए एक कठिन संख्या नहीं है; यह केवल दशमलव के बाद एक जगह है, यह दो पांचवें या 40% के समान है, इतना कठिन क्या है? लेकिन अधिकांश प्रोग्रामिंग वातावरण बाइनरी फ्लोटिंग पॉइंट का उपयोग करते हैं, और इस नंबर का प्रतिनिधित्व नहीं कर सकते हैं! यहां तक ​​कि यदि कंप्यूटर 0.4 प्रदर्शित करता है, तो कंप्यूटर द्वारा उपयोग किया जाने वाला वास्तविक मान बिल्कुल 0.4 नहीं है। तो जब आप गोल और अंकगणित की बात आती है तो आपको सभी प्रकार के अनजान व्यवहार मिलते हैं।

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

1

दिलचस्प सवाल। यद्यपि आप "निचले वेब लड़के" हैं, लेकिन मुझे यह कहना होगा कि यह बहुत अच्छा है कि आप इस बारे में उत्सुक हैं कि बाइनरी आपको कैसे प्रभावित करती है। मदद करने के लिए मैं एक निम्न स्तर की भाषा लेने और इसके साथ खेलने के सुझाव देने का सुझाव दूंगा। सी प्रोग्रामिंग और/या असेंबली की पसंद के साथ कुछ। जहां तक ​​PHP का उपयोग PHP के स्रोत कोड और इसके कार्यान्वयन के माध्यम से देखने का प्रयास करें। यहाँ द्विआधारी पर एक गुणवत्ता लिंक/हेक्साडेसिमल http://maven.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html गुड लक और खुश सीखने :)

+0

यह दिलचस्प लग रहा है। क्या आप एक पीडीएफ दस्तावेज़ पोस्ट कर सकते हैं? लिंक के – Bytemain

+0

? यह स्रोत 1 99 6 से है। मुझे पीडी दस्तावेज़ का यकीन नहीं है। आप लेखक से संपर्क करने का प्रयास कर सकते हैं http://cs.smith.edu/fac_dthiebaut.php वह अभी भी इस विद्यालय में कंप्यूटर विज्ञान सिखाता है –

+0

http://freecomputerbooks.com/The-Art-of-Assembly-Language.html – Bytemain

संबंधित मुद्दे