बिट फ़ील्ड: Difference between revisions
(Created page with "{{Short description|Data structure in computer programming}} अंश फ़ील्ड एक डेटा संरचना है जिसमें एक य...") |
No edit summary |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Data structure in computer programming}} | {{Short description|Data structure in computer programming}} | ||
[[ अंश ]] | '''[[ अंश |बिट]] क्षेत्र''' [[डेटा संरचना]] है जिसमें या अधिक आसन्न बिट होते हैं जिन्हें विशिष्ट उद्देश्यों के लिए आवंटित किया गया है, ताकि संरचना के भीतर किसी भी बिट या बिट के समूह को समूह या निरीक्षण किया जा सके।<ref name="BrummBrumm1988">{{cite book|author1=Penn Brumm|author2=Don Brumm|title=80386 Assembly Language: A Complete Tutorial and Subroutine Library|url=https://books.google.com/books?id=qjkiAQAAIAAJ|date=August 1988|publisher=McGraw-Hill School Education Group|isbn=978-0-8306-9047-3|page=606}}</ref><ref name="Oualline1997">{{cite book|author=Steve Oualline|title=प्रैक्टिकल सी प्रोग्रामिंग|url=https://archive.org/details/practicalcprogra00oual_0|url-access=registration|year=1997|publisher="O'Reilly Media, Inc."|isbn=978-1-56592-306-5|pages=[https://archive.org/details/practicalcprogra00oual_0/page/403 403]–}}</ref> अतः बिट क्षेत्र का उपयोग सामान्यतः ज्ञात, निश्चित बिट-चौड़ाई जैसे एकल-बिट [[बूलियन डेटा प्रकार]] के [[आदिम डेटा प्रकार|आदिम डेटा प्रकारों]] को दर्शाने के लिए किया जाता है। | ||
इस प्रकार से क्षेत्र के भीतर अलग-अलग बिट का अर्थ प्रोग्रामर द्वारा निर्धारित किया जाता है; इस प्रकार से उदाहरण के लिए, बिट क्षेत्र में प्रथम बिट (क्षेत्र के आधार एड्रेस पर स्थित) का उपयोग कभी-कभी बिट क्षेत्र से जुड़े किसी विशेष विशेषता की स्थिति निर्धारित करने के लिए किया जाता है।<ref name="Miller1992">{{cite book|author=Michael A. Miller|title=The 68000 Microprocessor Family: Architecture, Programming, and Applications|url=https://books.google.com/books?id=6qAkAQAAIAAJ|date=January 1992|publisher=Merrill|isbn=978-0-02-381560-7|page=323}}</ref> | |||
[[ CPU ]] और अन्य तार्किक उपकरणों के भीतर, फ़्लैग नामक बिट | |||
अतः [[ CPU |सीपीयू]] और अन्य तार्किक उपकरणों के भीतर, फ़्लैग नामक बिट क्षेत्र का संग्रह सामान्यतः विशेष संचालन के परिणाम को नियंत्रित करने या इंगित करने के लिए उपयोग किया जाता है।<ref name="GriffithsAdams2010">{{cite book|author1=Ian Griffiths|author2=Matthew Adams|author3=Jesse Liberty|title=Programming C# 4.0: Building Windows, Web, and RIA Applications for the .NET 4.0 Framework|url=https://books.google.com/books?id=8graYKZ7rhIC&pg=PA81|date=30 July 2010|publisher="O'Reilly Media, Inc."|isbn=978-1-4493-9972-6|pages=81–}}</ref> प्रोसेसर के निकट [[ स्थिति रजिस्टर |स्थिति रजिस्टर]] होता है जो '''फ्लैग''' से बना होता है। इस प्रकार से उदाहरण के लिए, यदि किसी जोड़ का परिणाम गंतव्य में निष्पादित नहीं किया जा सकता है तो अंकगणितीय अतिप्रवाह समूह किया जाता है। फ्लैग का उपयोग बाद के संचालन, जैसे सप्रतिबन्ध [[शाखा (कंप्यूटर विज्ञान)]] को निर्धारित करने के लिए किया जा सकता है। इस प्रकार से उदाहरण के लिए, यदि किसी पिछले संक्रिया द्वारा Z (शून्य) फ्लैग सेट किया गया था, तो x86 असेंबली लैंग्वेज में एक <syntaxhighlight lang="asm" inline="">JE ...</syntaxhighlight>(समान होने पर कूदें) निर्देश का परिणाम सम्मिलित होगा। | |||
अतः एक बिट क्षेत्र को [[बिट सरणी]] से अलग किया जाता है जिसमें बाद वाले का उपयोग पूर्णांक द्वारा अनुक्रमित बिट के बड़े समूह को संग्रहीत करने के लिए किया जाता है और यह प्रायः लैंग्वेज द्वारा समर्थित किसी भी अभिन्न प्रकार से व्यापक होता है। इस प्रकार से दूसरी ओर, बिट क्षेत्र सामान्यतः मशीन वर्ड (डेटा प्रकार) में फिट होते हैं,<ref name="Miller1992" />और बिट का निरूपण उनके संख्यात्मक सूचकांक से स्वतंत्र है।<ref name="Oualline1997" /> | |||
==कार्यान्वयन== | ==कार्यान्वयन== | ||
बिट | अतः बिट क्षेत्र का उपयोग मेमोरी व्यय को कम करने के लिए किया जा सकता है जब किसी प्रोग्राम को कई पूर्णांक चर की आवश्यकता होती है जिसमें सदैव कम मान होंगे। इस प्रकार से उदाहरण के लिए, कई प्रणालियों में पूर्णांक मान संग्रहीत करने के लिए दो बाइट (16-बिट) मेमोरी की आवश्यकता होती है; कभी-कभी संग्रहीत किए जाने वाले मानों को वस्तुतः मात्र या दो बिट की आवश्यकता होती है। इस प्रकार से इनमें से कई छोटे चर को बिट क्षेत्र साझा करने से मेमोरी में डेटा की कुशल पैकेजिंग की अनुमति मिलती है।<ref name="Mimar1991">{{cite book|author=Tibet Mimar|title=Programming and Designing with the 68000 Family: Including 68000, 68010/12, 68020, and the 68030|url=https://books.google.com/books?id=arFQAAAAMAAJ|year=1991|publisher=Prentice Hall|isbn=978-0-13-731498-0|page=275}}</ref> | ||
अतः C और C++ में, मूल कार्यान्वयन-परिभाषित बिट क्षेत्र <code>unsigned int</code>, <code>signed int</code>, या (सी99 में) <code>_Bool</code> का उपयोग करके बनाया जा सकता है। इस स्थिति में, प्रोग्रामर बिट क्षेत्र के लिए संरचना घोषित कर सकता है जो कई उपक्षेत्रों की चौड़ाई को लेबल और निर्धारित करता है।<ref name="Prata 2007">{{cite book|last=Prata|first=Stephen|title=सी प्राइम मोर|year=2007|publisher=Sams|location=Indianapolis, Ind|isbn=978-0-672-32696-7|edition=5th}}</ref> इस प्रकार से समान प्रकार के आसन्न घोषित बिट क्षेत्र को कंपाइलर द्वारा कम शब्दों में पैक किया जा सकता है, यदि प्रत्येक 'क्षेत्र' को अलग से घोषित किया जाता है तो उपयोग की जाने वाली मेमोरी की तुलना में। | |||
उन लैंग्वेजों के लिए जिनमें मूल बिट क्षेत्र की कमी है, या जहां प्रोग्रामर परिणामी बिट प्रतिनिधित्व पर नियंत्रण चाहता है, बड़े शब्द प्रकार के भीतर बिट को मैन्युअल रूप से परिवर्तन करना संभव है। इस प्रकार से इस स्थिति में, प्रोग्रामर [[मास्क (कंप्यूटिंग)]] और [[बिटवाइज़ संचालन]] के संयोजन का उपयोग करके क्षेत्र में बिट समूह, परीक्षण और बदल सकता है।<ref name="Daggett2013">{{cite book|author=Mark E. Daggett|title=विशेषज्ञ जावास्क्रिप्ट|url=https://books.google.com/books?id=MPBZAgAAQBAJ&pg=PA68|date=13 November 2013|publisher=Apress|isbn=978-1-4302-6097-4|pages=68–}}</ref> | |||
==उदाहरण== | ==उदाहरण== | ||
===सी प्रोग्रामिंग | ===सी प्रोग्रामिंग लैंग्वेज=== | ||
C (प्रोग्रामिंग | इस प्रकार से C (प्रोग्रामिंग लैंग्वेज) और [[C++]] में बिट क्षेत्र घोषित करना:<ref name="Prata 2007"/> | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
// opaque and show | // opaque and show | ||
Line 57: | Line 58: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
सी | सी <code>struct</code> में बिट क्षेत्र का लेआउट [[अनिर्दिष्ट व्यवहार|कार्यान्वयन-परिभाषित]] है। इस प्रकार से ऐसे व्यवहार के लिए जो सभी कंपाइलरों में पूर्वानुमानित रहता है, आदिम और बिट प्रचालकों के साथ बिट क्षेत्र का अनुकरण करना ठीक हो सकता है: | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
/* Each of these preprocessor directives defines a single bit, | /* Each of these preprocessor directives defines a single bit, | ||
Line 92: | Line 93: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===प्रोसेसर अवस्था रजिस्टर=== | |||
अतः प्रोसेसर की अवस्था रजिस्टर बिट क्षेत्र है जिसमें कई फ़्लैग बिट होते हैं। प्रत्येक फ़्लैग बिट प्रोसेसर की वर्तमान स्थिति के विषय में सूचना का वर्णन करता है।<ref>{{cite book|title=इनसाइडर|url=https://books.google.com/books?id=AFpRAAAAYAAJ|date=January 1986|publisher=W. Green|page=108}}</ref> इस प्रकार से उदाहरण के लिए, [[एमओएस टेक्नोलॉजी 6502]] प्रोसेसर की अवस्था रजिस्टर निम्न दिखाया गया है: | |||
===प्रोसेसर | |||
प्रोसेसर | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ 6502 | |+ 6502 अवस्था रजिस्टर | ||
|- | |- | ||
! | ! बिट 7 !! बिट 6 !! बिट 5 !! बिट 4 !! बिट 3 !! बिट 2 !! बिट 1 !! बिट 0 | ||
|- | |- | ||
| '''N'''egative flag || o'''V'''erflow flag || - || '''B'''reak flag || '''D'''ecimal flag || '''I'''nterrupt-disable flag || '''Z'''ero flag || '''C'''arry flag | | '''N'''egative flag || o'''V'''erflow flag || - || '''B'''reak flag || '''D'''ecimal flag || '''I'''nterrupt-disable flag || '''Z'''ero flag || '''C'''arry flag | ||
|} | |} | ||
ये | इस प्रकार से ये बिट किसी संक्रिया के परिणाम के बाद प्रोसेसर द्वारा समूह किए जाते हैं। कुछ बिट (जैसे कैरी, इंटरप्ट-डिसेबल और दशमलव फ्लैग) को समूह और स्पष्ट निर्देशों का उपयोग करके स्पष्ट रूप से नियंत्रित किया जा सकता है। अतः इसके अतिरिक्त, फ्लैग की वर्तमान स्थिति के आधार पर निष्पादन को बदलने के लिए ब्रांचिंग निर्देशों को भी परिभाषित किया गया है। | ||
उदाहरण के लिए, | इस प्रकार से उदाहरण के लिए, <code>ADC</code> (कैरी के साथ जोड़ें) निर्देश के बाद, <code>BVS</code> (oVerflow समूह पर शाखा) निर्देश का उपयोग इस आधार पर सम्मिलित करने के लिए किया जा सकता है कि अतिरिक्त निर्देश के परिणाम के बाद प्रोसेसर द्वारा अधिप्रवाह फ्लैग समूहित किया गया था या नहीं। | ||
=== | ===फ्लैग शब्दों से बिट उद्धरण=== | ||
फ्लैग क्षेत्र में फ्लैग का उपसमूह मास्क (कंप्यूटिंग) के साथ [[तार्किक संयोजन]] द्वारा निकाला जा सकता है। बड़ी संख्या में लैंग्वेज [[ तार्किक बदलाव |तार्किक शिफ्ट]] प्रचालक (<<) का समर्थन करती हैं, जहां <code>1 << n</code> एक बिट को nवें स्थान पर संरेखित करता है। इस प्रकार से अधिकांश या अधिक बिट के मान को अलग करने के लिए तर्कसंगत सर्वनिष्ठ प्रचालक (&) के उपयोग का भी समर्थन करते हैं। | |||
यदि किसी | अतः यदि किसी उपकरण से अवस्था-बाइट 0x67 है और 5वां फ़्लैग बिट डेटा-रेडी को इंगित करता है। मास्क-बाइट <math>2^5 = 0x20</math> है। स्थिति-बाइट 0x67 का तार्किक संयोजन (<code>0110 0111</code> बाइनरी में) मास्क-बाइट 0x20 के साथ(<code>0010 0000</code> बाइनरी में) का मूल्यांकन 0x20 है। इसका अर्थ है कि फ़्लैग बिट समूह है अर्थात उपकरण में डेटा तैयार है। यदि फ़्लैग-बिट समूह नहीं किया गया होता, तो इसका मूल्यांकन 0 होता अर्थात उपकरण से कोई डेटा उपलब्ध नहीं होता। | ||
एक | इस प्रकार से एक चर v से nवें बिट की जाँच करने के लिए, संक्रिया करें: | ||
बूल nth_is_set = (v & (1 << n)) != 0; | बूल nth_is_set = (v & (1 << n)) != 0; | ||
बूल nth_is_set = (v >> n) और 1; | बूल nth_is_set = (v >> n) और 1; | ||
=== | ===फ्लैग शब्दों में बिट परिवर्तित करना=== | ||
फ़्लैग में | अतः फ़्लैग में बिट लिखना, पढ़ना या टॉगल करना मात्र OR, AND और NOT संक्रिया का उपयोग करके किया जा सकता है - संक्रिया जिन्हें प्रोसेसर में शीघ्रता से निष्पादित किया जा सकता है। बिट समूहित करने के लिए, [[ तार्किक संचालक |तार्किक संचालक]] मास्क बाइट के साथ अवस्था बाइट देता है। इस प्रकार से मास्क बाइट या अवस्था बाइट में समूह किया गया कोई भी बिट परिणाम में समूहित किया जाएगा। | ||
थोड़ा टॉगल करने के लिए, | अतः थोड़ा टॉगल करने के लिए, अवस्था बाइट और मास्क बाइट को [[ विशिष्ट विभक्ति |विशिष्ट विभक्ति]] करें। यदि इसे स्पष्ट किया जाए तो यह थोड़ा समूह हो जाएगा या समूहित होने पर यह थोड़ा स्पष्ट हो जाएगा। | ||
==यह भी देखें== | ==यह भी देखें== | ||
* [[बाइनरी कोड]] | * [[बाइनरी कोड]] | ||
* [[बिटबोर्ड]], शतरंज और इसी | * [[बिटबोर्ड]], शतरंज और इसी प्रकार के खेलों में उपयोग किया जाता है | ||
* बिट सरणी (या बिट स्ट्रिंग) | * बिट सरणी (या बिट स्ट्रिंग) | ||
* [[ शब्द (कंप्यूटर वास्तुकला) ]] | * [[ शब्द (कंप्यूटर वास्तुकला) |शब्द (कंप्यूटर संरचना)]] | ||
* मास्क (कंप्यूटिंग) | * मास्क (कंप्यूटिंग) | ||
* [[कार्यक्रम स्थिति शब्द]] | * [[कार्यक्रम स्थिति शब्द|प्रोग्राम स्थिति शब्द]] | ||
* स्थिति रजिस्टर | * स्थिति रजिस्टर | ||
* [[झंडे रजिस्टर (कंप्यूटिंग)]] | * [[झंडे रजिस्टर (कंप्यूटिंग)|फ्लैग रजिस्टर (कंप्यूटिंग)]] | ||
* [[नियंत्रण रजिस्टर]] | * [[नियंत्रण रजिस्टर]] | ||
==संदर्भ== | ==संदर्भ== | ||
<references/> | <references/> | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
Line 141: | Line 139: | ||
* [http://c2.com/cgi/wiki?BitField Description from another wiki] | * [http://c2.com/cgi/wiki?BitField Description from another wiki] | ||
* [https://web.archive.org/web/20080203070726/http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=131 Use case in a C++ guide] | * [https://web.archive.org/web/20080203070726/http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=131 Use case in a C++ guide] | ||
* [https://web.archive.org/web/20070428213243/http://libbit.sourceforge.net/ C++ | * [https://web.archive.org/web/20070428213243/http://libbit.sourceforge.net/ C++ libबिट बिट library] ([http://sourceforge.net/projects/libbit/ alternative URL]) | ||
* [https://graphics.stanford.edu/~seander/bithacks.html | * [https://graphics.stanford.edu/~seander/bithacks.html बिट Twiddling Hacks]: Several snippets of C code manipulating बिट fields | ||
[[Category:Created On 10/07/2023]] | [[Category:Created On 10/07/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:उदाहरण सी कोड वाले लेख]] | |||
[[Category:बिट डेटा संरचनाएँ]] |
Latest revision as of 10:54, 26 July 2023
बिट क्षेत्र डेटा संरचना है जिसमें या अधिक आसन्न बिट होते हैं जिन्हें विशिष्ट उद्देश्यों के लिए आवंटित किया गया है, ताकि संरचना के भीतर किसी भी बिट या बिट के समूह को समूह या निरीक्षण किया जा सके।[1][2] अतः बिट क्षेत्र का उपयोग सामान्यतः ज्ञात, निश्चित बिट-चौड़ाई जैसे एकल-बिट बूलियन डेटा प्रकार के आदिम डेटा प्रकारों को दर्शाने के लिए किया जाता है।
इस प्रकार से क्षेत्र के भीतर अलग-अलग बिट का अर्थ प्रोग्रामर द्वारा निर्धारित किया जाता है; इस प्रकार से उदाहरण के लिए, बिट क्षेत्र में प्रथम बिट (क्षेत्र के आधार एड्रेस पर स्थित) का उपयोग कभी-कभी बिट क्षेत्र से जुड़े किसी विशेष विशेषता की स्थिति निर्धारित करने के लिए किया जाता है।[3]
अतः सीपीयू और अन्य तार्किक उपकरणों के भीतर, फ़्लैग नामक बिट क्षेत्र का संग्रह सामान्यतः विशेष संचालन के परिणाम को नियंत्रित करने या इंगित करने के लिए उपयोग किया जाता है।[4] प्रोसेसर के निकट स्थिति रजिस्टर होता है जो फ्लैग से बना होता है। इस प्रकार से उदाहरण के लिए, यदि किसी जोड़ का परिणाम गंतव्य में निष्पादित नहीं किया जा सकता है तो अंकगणितीय अतिप्रवाह समूह किया जाता है। फ्लैग का उपयोग बाद के संचालन, जैसे सप्रतिबन्ध शाखा (कंप्यूटर विज्ञान) को निर्धारित करने के लिए किया जा सकता है। इस प्रकार से उदाहरण के लिए, यदि किसी पिछले संक्रिया द्वारा Z (शून्य) फ्लैग सेट किया गया था, तो x86 असेंबली लैंग्वेज में एक JE ...
(समान होने पर कूदें) निर्देश का परिणाम सम्मिलित होगा।
अतः एक बिट क्षेत्र को बिट सरणी से अलग किया जाता है जिसमें बाद वाले का उपयोग पूर्णांक द्वारा अनुक्रमित बिट के बड़े समूह को संग्रहीत करने के लिए किया जाता है और यह प्रायः लैंग्वेज द्वारा समर्थित किसी भी अभिन्न प्रकार से व्यापक होता है। इस प्रकार से दूसरी ओर, बिट क्षेत्र सामान्यतः मशीन वर्ड (डेटा प्रकार) में फिट होते हैं,[3]और बिट का निरूपण उनके संख्यात्मक सूचकांक से स्वतंत्र है।[2]
कार्यान्वयन
अतः बिट क्षेत्र का उपयोग मेमोरी व्यय को कम करने के लिए किया जा सकता है जब किसी प्रोग्राम को कई पूर्णांक चर की आवश्यकता होती है जिसमें सदैव कम मान होंगे। इस प्रकार से उदाहरण के लिए, कई प्रणालियों में पूर्णांक मान संग्रहीत करने के लिए दो बाइट (16-बिट) मेमोरी की आवश्यकता होती है; कभी-कभी संग्रहीत किए जाने वाले मानों को वस्तुतः मात्र या दो बिट की आवश्यकता होती है। इस प्रकार से इनमें से कई छोटे चर को बिट क्षेत्र साझा करने से मेमोरी में डेटा की कुशल पैकेजिंग की अनुमति मिलती है।[5]
अतः C और C++ में, मूल कार्यान्वयन-परिभाषित बिट क्षेत्र unsigned int
, signed int
, या (सी99 में) _Bool
का उपयोग करके बनाया जा सकता है। इस स्थिति में, प्रोग्रामर बिट क्षेत्र के लिए संरचना घोषित कर सकता है जो कई उपक्षेत्रों की चौड़ाई को लेबल और निर्धारित करता है।[6] इस प्रकार से समान प्रकार के आसन्न घोषित बिट क्षेत्र को कंपाइलर द्वारा कम शब्दों में पैक किया जा सकता है, यदि प्रत्येक 'क्षेत्र' को अलग से घोषित किया जाता है तो उपयोग की जाने वाली मेमोरी की तुलना में।
उन लैंग्वेजों के लिए जिनमें मूल बिट क्षेत्र की कमी है, या जहां प्रोग्रामर परिणामी बिट प्रतिनिधित्व पर नियंत्रण चाहता है, बड़े शब्द प्रकार के भीतर बिट को मैन्युअल रूप से परिवर्तन करना संभव है। इस प्रकार से इस स्थिति में, प्रोग्रामर मास्क (कंप्यूटिंग) और बिटवाइज़ संचालन के संयोजन का उपयोग करके क्षेत्र में बिट समूह, परीक्षण और बदल सकता है।[7]
उदाहरण
सी प्रोग्रामिंग लैंग्वेज
इस प्रकार से C (प्रोग्रामिंग लैंग्वेज) और C++ में बिट क्षेत्र घोषित करना:[6]
// opaque and show
#define YES 1
#define NO 0
// line styles
#define SOLID 1
#define DOTTED 2
#define DASHED 3
// primary colors
#define BLUE 0b100
#define GREEN 0b010
#define RED 0b001
// mixed colors
#define BLACK 0 /* 000 */
#define YELLOW (RED | GREEN) /* 011 */
#define MAGENTA (RED | BLUE) /* 101 */
#define CYAN (GREEN | BLUE) /* 110 */
#define WHITE (RED | GREEN | BLUE) /* 111 */
const char* colors[8] = {"Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"};
// bit field box properties
struct BoxProps
{
unsigned int opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4; // fill to 8 bits
unsigned int show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned char : 0; // fill to nearest byte (16 bits)
unsigned char width : 4, // Split a byte into 2 fields of 4 bits
height : 4;
};
सी struct
में बिट क्षेत्र का लेआउट कार्यान्वयन-परिभाषित है। इस प्रकार से ऐसे व्यवहार के लिए जो सभी कंपाइलरों में पूर्वानुमानित रहता है, आदिम और बिट प्रचालकों के साथ बिट क्षेत्र का अनुकरण करना ठीक हो सकता है:
/* Each of these preprocessor directives defines a single bit,
corresponding to one button on the controller.
Button order matches that of the Nintendo Entertainment System. */
#define KEY_RIGHT 0b00000001
#define KEY_LEFT 0b00000010
#define KEY_DOWN 0b00000100
#define KEY_UP 0b00001000
#define KEY_START 0b00010000
#define KEY_SELECT 0b00100000
#define KEY_B 0b01000000
#define KEY_A 0b10000000
unsigned char gameControllerStatus = 0;
/* Sets the gameControllerStatus using OR */
void KeyPressed(unsigned char key)
{
gameControllerStatus |= key;
}
/* Clears the gameControllerStatus using AND and ~ (binary NOT)*/
void KeyReleased(unsigned char key)
{
gameControllerStatus &= ~key;
}
/* Tests whether a bit is set using AND */
unsigned char IsPressed(unsigned char key)
{
return gameControllerStatus & key;
}
प्रोसेसर अवस्था रजिस्टर
अतः प्रोसेसर की अवस्था रजिस्टर बिट क्षेत्र है जिसमें कई फ़्लैग बिट होते हैं। प्रत्येक फ़्लैग बिट प्रोसेसर की वर्तमान स्थिति के विषय में सूचना का वर्णन करता है।[8] इस प्रकार से उदाहरण के लिए, एमओएस टेक्नोलॉजी 6502 प्रोसेसर की अवस्था रजिस्टर निम्न दिखाया गया है:
बिट 7 | बिट 6 | बिट 5 | बिट 4 | बिट 3 | बिट 2 | बिट 1 | बिट 0 |
---|---|---|---|---|---|---|---|
Negative flag | oVerflow flag | - | Break flag | Decimal flag | Interrupt-disable flag | Zero flag | Carry flag |
इस प्रकार से ये बिट किसी संक्रिया के परिणाम के बाद प्रोसेसर द्वारा समूह किए जाते हैं। कुछ बिट (जैसे कैरी, इंटरप्ट-डिसेबल और दशमलव फ्लैग) को समूह और स्पष्ट निर्देशों का उपयोग करके स्पष्ट रूप से नियंत्रित किया जा सकता है। अतः इसके अतिरिक्त, फ्लैग की वर्तमान स्थिति के आधार पर निष्पादन को बदलने के लिए ब्रांचिंग निर्देशों को भी परिभाषित किया गया है।
इस प्रकार से उदाहरण के लिए, ADC
(कैरी के साथ जोड़ें) निर्देश के बाद, BVS
(oVerflow समूह पर शाखा) निर्देश का उपयोग इस आधार पर सम्मिलित करने के लिए किया जा सकता है कि अतिरिक्त निर्देश के परिणाम के बाद प्रोसेसर द्वारा अधिप्रवाह फ्लैग समूहित किया गया था या नहीं।
फ्लैग शब्दों से बिट उद्धरण
फ्लैग क्षेत्र में फ्लैग का उपसमूह मास्क (कंप्यूटिंग) के साथ तार्किक संयोजन द्वारा निकाला जा सकता है। बड़ी संख्या में लैंग्वेज तार्किक शिफ्ट प्रचालक (<<) का समर्थन करती हैं, जहां 1 << n
एक बिट को nवें स्थान पर संरेखित करता है। इस प्रकार से अधिकांश या अधिक बिट के मान को अलग करने के लिए तर्कसंगत सर्वनिष्ठ प्रचालक (&) के उपयोग का भी समर्थन करते हैं।
अतः यदि किसी उपकरण से अवस्था-बाइट 0x67 है और 5वां फ़्लैग बिट डेटा-रेडी को इंगित करता है। मास्क-बाइट है। स्थिति-बाइट 0x67 का तार्किक संयोजन (0110 0111
बाइनरी में) मास्क-बाइट 0x20 के साथ(0010 0000
बाइनरी में) का मूल्यांकन 0x20 है। इसका अर्थ है कि फ़्लैग बिट समूह है अर्थात उपकरण में डेटा तैयार है। यदि फ़्लैग-बिट समूह नहीं किया गया होता, तो इसका मूल्यांकन 0 होता अर्थात उपकरण से कोई डेटा उपलब्ध नहीं होता।
इस प्रकार से एक चर v से nवें बिट की जाँच करने के लिए, संक्रिया करें:
बूल nth_is_set = (v & (1 << n)) != 0; बूल nth_is_set = (v >> n) और 1;
फ्लैग शब्दों में बिट परिवर्तित करना
अतः फ़्लैग में बिट लिखना, पढ़ना या टॉगल करना मात्र OR, AND और NOT संक्रिया का उपयोग करके किया जा सकता है - संक्रिया जिन्हें प्रोसेसर में शीघ्रता से निष्पादित किया जा सकता है। बिट समूहित करने के लिए, तार्किक संचालक मास्क बाइट के साथ अवस्था बाइट देता है। इस प्रकार से मास्क बाइट या अवस्था बाइट में समूह किया गया कोई भी बिट परिणाम में समूहित किया जाएगा।
अतः थोड़ा टॉगल करने के लिए, अवस्था बाइट और मास्क बाइट को विशिष्ट विभक्ति करें। यदि इसे स्पष्ट किया जाए तो यह थोड़ा समूह हो जाएगा या समूहित होने पर यह थोड़ा स्पष्ट हो जाएगा।
यह भी देखें
- बाइनरी कोड
- बिटबोर्ड, शतरंज और इसी प्रकार के खेलों में उपयोग किया जाता है
- बिट सरणी (या बिट स्ट्रिंग)
- शब्द (कंप्यूटर संरचना)
- मास्क (कंप्यूटिंग)
- प्रोग्राम स्थिति शब्द
- स्थिति रजिस्टर
- फ्लैग रजिस्टर (कंप्यूटिंग)
- नियंत्रण रजिस्टर
संदर्भ
- ↑ Penn Brumm; Don Brumm (August 1988). 80386 Assembly Language: A Complete Tutorial and Subroutine Library. McGraw-Hill School Education Group. p. 606. ISBN 978-0-8306-9047-3.
- ↑ 2.0 2.1 Steve Oualline (1997). प्रैक्टिकल सी प्रोग्रामिंग. "O'Reilly Media, Inc.". pp. 403–. ISBN 978-1-56592-306-5.
- ↑ 3.0 3.1 Michael A. Miller (January 1992). The 68000 Microprocessor Family: Architecture, Programming, and Applications. Merrill. p. 323. ISBN 978-0-02-381560-7.
- ↑ Ian Griffiths; Matthew Adams; Jesse Liberty (30 July 2010). Programming C# 4.0: Building Windows, Web, and RIA Applications for the .NET 4.0 Framework. "O'Reilly Media, Inc.". pp. 81–. ISBN 978-1-4493-9972-6.
- ↑ Tibet Mimar (1991). Programming and Designing with the 68000 Family: Including 68000, 68010/12, 68020, and the 68030. Prentice Hall. p. 275. ISBN 978-0-13-731498-0.
- ↑ 6.0 6.1 Prata, Stephen (2007). सी प्राइम मोर (5th ed.). Indianapolis, Ind: Sams. ISBN 978-0-672-32696-7.
- ↑ Mark E. Daggett (13 November 2013). विशेषज्ञ जावास्क्रिप्ट. Apress. pp. 68–. ISBN 978-1-4302-6097-4.
- ↑ इनसाइडर. W. Green. January 1986. p. 108.
बाहरी संबंध
- Explanation from a book
- Description from another wiki
- Use case in a C++ guide
- C++ libबिट बिट library (alternative URL)
- बिट Twiddling Hacks: Several snippets of C code manipulating बिट fields