बिट प्रकलन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Algorithmically modifying data below the word level}} {{Other uses|Manipulation (disambiguation){{!}}Manipulation}} {{Use American English|date = March 201...")
 
No edit summary
 
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Algorithmically modifying data below the word level}}
{{Short description|Algorithmically modifying data below the word level}}
{{Other uses|Manipulation (disambiguation){{!}}Manipulation}}
'''[[ अंश |बिट]] प्रकलन''' एक [[शब्द (डेटा प्रकार)]] से कम बिट्स या [[डेटा (कंप्यूटिंग)]] के अन्य टुकड़ों को [[ कलन विधि | कलन विधि]] से छेड़छाड़ करने का कार्य है। इस प्रकार [[कंप्यूटर प्रोग्रामिंग]] कार्यों में बिट प्रकलन की आवश्यकता होती है जिसमें निम्न-स्तरीय उपकरण नियंत्रण, त्रुटि का पता लगाने और [[त्रुटि सुधार]] एल्गोरिदम, डेटा संपीड़न, [[ कूटलेखन | एन्क्रिप्शन]] एल्गोरिदम और [[अनुकूलन (कंप्यूटर विज्ञान)]] सम्मिलित हैं। अधिकांश अन्य कार्यों के लिए, आधुनिक [[प्रोग्रामिंग भाषा]]एँ [[प्रोग्रामर]] को उन बिट्स के बजाय सीधे एब्स्ट्रैक्शन के साथ काम करने की अनुमति देती हैं जो उन एब्स्ट्रैक्शन का प्रतिनिधित्व करते हैं।
{{Use American English|date = March 2019}}
{{refimprove|date=February 2020}}
{{Confuse|Bit banging}}
[[ अंश ]] हेरफेर एक [[शब्द (डेटा प्रकार)]] से कम बिट्स या [[डेटा (कंप्यूटिंग)]] के अन्य टुकड़ों को [[ कलन विधि ]] से छेड़छाड़ करने का कार्य है। [[कंप्यूटर प्रोग्रामिंग]] कार्यों में बिट हेरफेर की आवश्यकता होती है जिसमें निम्न-स्तरीय उपकरण नियंत्रण, त्रुटि का पता लगाने और [[त्रुटि सुधार]] एल्गोरिदम, डेटा संपीड़न, [[ कूटलेखन ]] एल्गोरिदम और [[अनुकूलन (कंप्यूटर विज्ञान)]] शामिल हैं। अधिकांश अन्य कार्यों के लिए, आधुनिक [[प्रोग्रामिंग भाषा]]एँ [[प्रोग्रामर]] को उन अमूर्तताओं का प्रतिनिधित्व करने वाले बिट्स के बजाय सीधे अमूर्तता (कंप्यूटर विज्ञान) के साथ काम करने की अनुमति देती हैं।


स्रोत कोड जो बिट हेरफेर करता है बिटवाइज़ संचालन का उपयोग करता है: AND, OR, XOR, NOT, और संभवतः बूलियन ऑपरेटरों के अनुरूप अन्य संचालन; [[बिटवाइज़ ऑपरेशन]] भी हैं # बिट शिफ्ट और ऑपरेशंस एक और शून्य को गिनने के लिए, उच्च और निम्न एक या शून्य, सेट, रीसेट और टेस्ट बिट्स, एक्सट्रैक्ट और इन्सर्ट फ़ील्ड्स, मास्क और ज़ीरो फ़ील्ड्स, बिट्स को इकट्ठा करने और निर्दिष्ट बिट से स्कैटर करने के लिए पदों या क्षेत्रों।
स्रोत कोड जो बिट प्रकलन करता है बिटवाइज़ संचालन का उपयोग करता है: एं, OR, XOR, NOT और संभवतः बूलियन ऑपरेटरों के अनुरूप अन्य संचालन; [[बिटवाइज़ ऑपरेशन]] एक और शून्य को गिनने, उच्च और निम्न एक या शून्य को खोजने, बिट्स को सेट करने, रीसेट करने और परीक्षण करने, फ़ील्ड्स निकालने और डालने, मास्क और शून्य फ़ील्ड्स को समूहित करने और बिट्स को निर्दिष्ट बिट स्थितियों या फ़ील्ड्स से समूहित करने और बिखेरने के लिए बिट शिफ्ट और ऑपरेशन भी हैं।
पूर्णांक अंकगणितीय ऑपरेटर अन्य ऑपरेटरों के साथ मिलकर बिट-ऑपरेशन को भी प्रभावित कर सकते हैं।


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


== शब्दावली ==
== शब्दावली ==


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


कंप्यूटिंग हार्डवेयर के इतिहास से बिट ट्विडलिंग शब्द आता है, जहां कंप्यूटर ऑपरेटर कंप्यूटर नियंत्रणों को ट्वीव या ट्वीडलिंग करके समायोजन करेंगे। जैसे-जैसे कंप्यूटर प्रोग्रामिंग लैंग्वेज विकसित हुई, प्रोग्रामर ने इस शब्द को अपनाया, जिसका मतलब डेटा के किसी भी प्रबंधन से है, जिसमें बिट-लेवल [[गणना]] शामिल है।
बिट ट्विडलिंग शब्द प्रारंभिक कंप्यूटिंग हार्डवेयर से आया है, जहां कंप्यूटर ऑपरेटर कंप्यूटर नियंत्रणों में बदलाव या घुमा-फिरा कर समायोजन करते थे। इस प्रकार जैसे-जैसे कंप्यूटर प्रोग्रामिंग भाषाएं विकसित हुईं, प्रोग्रामर्स ने डेटा के किसी भी प्रबंधन के लिए इस शब्द को अपनाया जिसमें बिट-स्तरीय [[गणना]] सम्मिलित है।


== बिटवाइज़ ऑपरेशन ==
== बिटवाइज़ ऑपरेशन ==
{{main|bitwise operation}}
एक बिटवाइज़ ऑपरेशन एक या एक से अधिक [[ थोड़ा अभ्यास ]] या बाइनरी अंक प्रणाली पर उनके व्यक्तिगत बिट्स के स्तर पर संचालित होता है। इस प्रकार यह केंद्रीय प्रसंस्करण इकाई (सीपीयू) द्वारा सीधे समर्थित एक तेज़, आदिम क्रिया है और इसका उपयोग तुलना और गणना के लिए मूल्यों में प्रकलन करने के लिए किया जाता है।
एक बिटवाइज़ ऑपरेशन एक या एक से अधिक [[ थोड़ा अभ्यास ]] या बाइनरी अंक प्रणाली पर उनके व्यक्तिगत बिट्स के स्तर पर संचालित होता है। यह केंद्रीय प्रसंस्करण इकाई (सीपीयू) द्वारा सीधे समर्थित एक तेज़, आदिम क्रिया है, और इसका उपयोग तुलना और गणना के लिए मूल्यों में हेरफेर करने के लिए किया जाता है।


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


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


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Line 34: Line 30:
  एक्स और (एक्स-1) == 0...000...0
  एक्स और (एक्स-1) == 0...000...0


यदि संख्या न तो शून्य है और न ही दो की शक्ति है, तो इसमें एक से अधिक स्थानों पर '1' होगा:
इस प्रकार यदि संख्या न तो शून्य है और न ही दो की शक्ति है, तो इसमें एक से अधिक स्थानों पर '1' होगा:
  x == 0...<span style= color:red >1</span>...0<span style= color:red >1</span>0...0
  x == 0...<span style= color:red >1</span>...0<span style= color:red >1</span>0...0
  x-1 == 0...<span style= color:red >1</span>...001...1
  x-1 == 0...<span style= color:red >1</span>...001...1
  x & (x-1) == 0...<span style= color:red >1</span>...000...0
  x & (x-1) == 0...<span style= color:red >1</span>...000...0


यदि इनलाइन असेंबली भाषा कोड का उपयोग किया जाता है, तो एक निर्देश (पॉपकंट) जो ऑपरेंड में 1 या 0 की संख्या की गणना करता है, उपलब्ध हो सकता है; ठीक एक '1' बिट वाला ऑपरेंड 2 की शक्ति है। हालांकि, इस तरह के निर्देश में उपरोक्त बिटवाइज़ विधि की तुलना में अधिक विलंबता हो सकती है।
यदि इनलाइन असेंबली भाषा कोड का उपयोग किया जाता है, तो एक निर्देश (पॉपकंट) जो ऑपरेंड में 1 या 0 की संख्या की गणना करता है, उपलब्ध हो सकता है; ठीक एक '1' बिट वाला ऑपरेंड 2 की शक्ति है। चूंकि, इस तरह के निर्देश में उपरोक्त बिटवाइज़ विधि की तुलना में अधिक विलंबता हो सकती है।
 
== बिट हेरफेर संचालन ==
{{see also|Bit Manipulation Instruction Sets}}


प्रोसेसर आमतौर पर उपयोगी बिट ऑपरेटरों का केवल एक सबसेट प्रदान करते हैं। प्रोग्रामिंग लैंग्वेज अधिकांश बिट ऑपरेशंस को सीधे सपोर्ट नहीं करती हैं, इसलिए उन्हें कोड करने के लिए मुहावरों का इस्तेमाल किया जाना चाहिए। उदाहरण के लिए, 'C' प्रोग्रामिंग भाषा केवल बिट-वार AND(&), OR(|), XOR(^) और NOT(~) प्रदान करती है। फोरट्रान AND(.and.), OR (.or.), XOR (.neqv.) और EQV(.eqv.) प्रदान करता है। अल्गोल सिंटैक्टिक बिटफ़ील्ड एक्सट्रैक्ट और इंसर्ट प्रदान करता है। जब भाषाएं बिट ऑपरेशंस प्रदान करती हैं जो सीधे हार्डवेयर निर्देशों को मैप नहीं करती हैं, तो कंपाइलर्स को उपलब्ध ऑपरेटरों से ऑपरेशन को संश्लेषित करना चाहिए।
== बिट प्रकलन संचालन ==
प्रोसेसर सामान्यतः उपयोगी बिट ऑपरेटरों का केवल एक सबसेट प्रदान करते हैं। प्रोग्रामिंग लैंग्वेज अधिकांश बिट ऑपरेशंस को सीधे समर्थन नहीं करती हैं, इसलिए उन्हें कोड करने के लिए मुहावरों का उपयोग किया जाना चाहिए। उदाहरण के लिए, 'सी' प्रोग्रामिंग भाषा केवल बिट-वार AND(&), OR(|), XOR(^) और NOT(~) प्रदान करती है। फोरट्रान AND(.and.), OR (.or.), XOR (.neqv.) और EQV(.eqv.) प्रदान करता है। इस प्रकार अल्गोल सिंटैक्टिक बिटफ़ील्ड एक्सट्रैक्ट और इंसर्ट प्रदान करता है। इस प्रकार जब भाषाएं बिट ऑपरेशंस प्रदान करती हैं जो सीधे हार्डवेयर निर्देशों को मैप नहीं करती हैं, तो कंपाइलर्स को उपलब्ध ऑपरेटरों से ऑपरेशन को संश्लेषित करना चाहिए।


एक विशेष रूप से उपयोगी बिट ऑपरेशन एक मशीन शब्द के उच्च सेट बिट को खोजने के लिए उपयोग किए जाने वाले अग्रणी शून्यों की गिनती है, हालांकि विभिन्न आर्किटेक्चर पर इसके अलग-अलग नाम हो सकते हैं।<ref>On most Intel chips, it's BSR (bitscan reverse), though newer SoCs also have LZCNT (count leading zeros)</ref> कोई सरल प्रोग्रामिंग भाषा मुहावरा नहीं है, इसलिए इसे एक कंपाइलर इंट्रिंसिक या सिस्टम लाइब्रेरी रूटीन द्वारा प्रदान किया जाना चाहिए। उस ऑपरेटर के बिना, अंकगणितीय संचालन के असममित कैरी-प्रचार के कारण, किसी शब्द के उच्च बिट के संबंध में कोई भी ऑपरेशन करने के लिए यह बहुत महंगा है (पहला सेट # सीएलजेड देखें)। सौभाग्य से, अधिकांश सीपीयू आर्किटेक्चर ने 1980 के दशक के मध्य से प्रदान किया है। साथ में ऑपरेशन काउंट वाले, जिसे POPCOUNT भी कहा जाता है, जो मशीन शब्द में सेट बिट्स की संख्या की गणना करता है, आमतौर पर हार्डवेयर ऑपरेटर के रूप में भी प्रदान किया जाता है। बिट सेट, रीसेट, टेस्ट और टॉगल जैसे सरल बिट ऑपरेशंस अक्सर हार्डवेयर ऑपरेटरों के रूप में प्रदान किए जाते हैं, लेकिन यदि वे नहीं हैं तो आसानी से अनुकरण किए जाते हैं - उदाहरण के लिए (SET R0, 1; LSHFT R0, i; OR x, R0) सेट बिट i ऑपरेंड एक्स में।
एक विशेष रूप से उपयोगी बिट ऑपरेशन एक मशीन शब्द के उच्च सेट बिट को खोजने के लिए उपयोग किए जाने वाले अग्रणी शून्यों की गिनती है, चूंकि विभिन्न आर्किटेक्चर पर इसके अलग-अलग नाम हो सकते हैं।<ref>On most Intel chips, it's BSR (bitscan reverse), though newer SoCs also have LZCNT (count leading zeros)</ref> कोई सरल प्रोग्रामिंग भाषा मुहावरा नहीं है, इसलिए इसे एक कंपाइलर इंट्रिंसिक या सिस्टम लाइब्रेरी रूटीन द्वारा प्रदान किया जाना चाहिए। इस प्रकार उस ऑपरेटर के बिना, अंकगणितीय संचालन के असममित कैरी-प्रचार के कारण, किसी शब्द के उच्च बिट के संबंध में कोई भी ऑपरेशन करने के लिए यह बहुत महंगा है (पहला सेट # सीएलजेड देखें)। सौभाग्य से, अधिकांश सीपीयू आर्किटेक्चर ने 1980 के दशक के मध्य से प्रदान किया है। साथ में ऑपरेशन काउंट वाले, जिसे पॉपकाउंट भी कहा जाता है, जो मशीन शब्द में सेट बिट्स की संख्या की गणना करता है, सामान्यतः हार्डवेयर ऑपरेटर के रूप में भी प्रदान किया जाता है। इस प्रकार बिट सेट, रीसेट, टेस्ट और टॉगल जैसे सरल बिट ऑपरेशंस अधिकांशतः हार्डवेयर ऑपरेटरों के रूप में प्रदान किए जाते हैं, किन्तु यदि वे नहीं हैं तो आसानी से अनुकरण किए जाते हैं - उदाहरण के लिए (सेट R0, 1; एलएसएचएफटी आर0, आई; या एक्स, आर0) सेट बिट i ऑपरेंड एक्स में।


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


* निर्दिष्ट बिट स्थिति से स्पष्ट ऊपर (शब्द के निचले हिस्से को छोड़ दें)
* निर्दिष्ट बिट स्थिति से स्पष्ट ऊपर (शब्द के निचले हिस्से को छोड़ दें)
Line 56: Line 50:
* बिटफील्ड एक्सट्रैक्ट
* बिटफील्ड एक्सट्रैक्ट
* बिटफील्ड डालें
* बिटफील्ड डालें
*बिटफ़ील्ड स्कैटर/एकत्र संचालन जो मशीन शब्द पर बिटफ़ील्ड के सन्निहित भागों को वितरित करते हैं, या शब्द में अलग-अलग बिटफ़ील्ड को बिटफ़ील्ड के एक सन्निहित हिस्से में इकट्ठा करते हैं (हाल ही के इंटेल PEXT/PDEP ऑपरेटरों को देखें)। क्रिप्टोग्राफी और वीडियो एन्कोडिंग द्वारा उपयोग किया जाता है।
*बिटफ़ील्ड स्कैटर/एकत्र संचालन जो मशीन शब्द पर बिटफ़ील्ड के सन्निहित भागों को वितरित करते हैं, या शब्द में अलग-अलग बिटफ़ील्ड को बिटफ़ील्ड के एक सन्निहित हिस्से में समूहित करते हैं (हाल ही के इंटेल पीईएक्सटी/पीडीईपी ऑपरेटरों को देखें)। क्रिप्टोग्राफी और वीडियो एन्कोडिंग द्वारा उपयोग किया जाता है।
* मैट्रिक्स उलटा
* मैट्रिक्स उलटा
कुछ अंकगणितीय संक्रियाओं को सरल संक्रियाओं और बिट संक्रियाओं में घटाया जा सकता है:
कुछ अंकगणितीय संक्रियाओं को सरल संक्रियाओं और बिट संक्रियाओं में घटाया जा सकता है:
* शिफ्ट-ऐड के अनुक्रम के लिए स्थिरांक से गुणा कम करें
* शिफ्ट-ऐड के अनुक्रम के लिए स्थिरांक से गुणा कम करें
उदाहरण के लिए 9 से गुणा करें, कॉपी ऑपरेंड है, 3 से शिफ्ट करें (8 से गुणा करें), और मूल ऑपरेंड में जोड़ें।
उदाहरण के लिए 9 से गुणा करें, कॉपी ऑपरेंड है, 3 से शिफ्ट करें (8 से गुणा करें), और मूल ऑपरेंड में जोड़ें।
* शिफ्ट-घटाने के क्रम में निरंतर विभाजन को कम करें
* शिफ्ट-घटाने के क्रम में निरंतर विभाजन को कम करें।


=== मास्किंग ===
=== मास्किंग ===
{{main|mask (computing)}}
एक मुखौटा वह डेटा है जिसका उपयोग बिटवाइज़ संचालन के लिए किया जाता है, विशेष रूप से [[बिट फ़ील्ड]] में किया जाता है।
एक मुखौटा वह डेटा है जिसका उपयोग बिटवाइज़ संचालन के लिए किया जाता है, विशेष रूप से [[बिट फ़ील्ड]] में।


मास्क का उपयोग करके, एक [[बाइट]], [[ कुतरना ]], [[वर्ड (कंप्यूटर आर्किटेक्चर)]] (आदि) में कई बिट्स को एक ही बिटवाइज़ ऑपरेशन में चालू, बंद या उलटा (या इसके विपरीत) सेट किया जा सकता है। मास्किंग के अधिक व्यापक अनुप्रयोग, जब संचालन के लिए सशर्त रूप से लागू होते हैं, तो उन्हें प्रिडिक्शन (कंप्यूटर आर्किटेक्चर) कहा जाता है।
मास्क का उपयोग करके, एक [[बाइट]], [[ कुतरना | निबल]], [[वर्ड (कंप्यूटर आर्किटेक्चर)]] (आदि) में कई बिट्स को एक ही बिटवाइज़ ऑपरेशन में चालू, बंद या उलटा (या इसके विपरीत) सेट किया जा सकता है। इस प्रकार मास्किंग के अधिक व्यापक अनुप्रयोग, जब संचालन के लिए सशर्त रूप से लागू होते हैं, तो उन्हें प्रिडिक्शन (कंप्यूटर आर्किटेक्चर) कहा जाता है।


== यह भी देखें ==
== यह भी देखें ==
Line 73: Line 66:
* [[थोड़ा पीटना]]
* [[थोड़ा पीटना]]
* बिट फील्ड
* बिट फील्ड
* [[बिट हेरफेर निर्देश सेट]] - x[[86]] निर्देश सेट के लिए बिट हेरफेर एक्सटेंशन।
* [[बिट हेरफेर निर्देश सेट|बिट प्रकलन निर्देश सेट]] - x[[86]] निर्देश सेट के लिए बिट प्रकलन एक्सटेंशन।
* [[बिट विधेय]]
* [[बिट विधेय]]
* [[बिट विशिष्टता (बहुविकल्पी)]]
* [[बिट विशिष्टता (बहुविकल्पी)]]
Line 83: Line 76:
== संदर्भ ==
== संदर्भ ==
{{Reflist}}
{{Reflist}}
== अग्रिम पठन ==
== अग्रिम पठन ==
* {{cite book |last=Warren |first=Henry S. |date=2013 |title=[[Hacker's Delight]] |edition=2nd |publisher=Addison–Wesley Professional |page=512 |isbn=978-0321842688}}
* {{cite book |last=Warren |first=Henry S. |date=2013 |title=[[Hacker's Delight]] |edition=2nd |publisher=Addison–Wesley Professional |page=512 |isbn=978-0321842688}}
* {{cite book |last=Knuth |first=Donald E. |date=2009 |title=[[The Art of Computer Programming]] Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams |edition=1st |publisher=Addison–Wesley Professional |page=272 |isbn=978-0321580504 }} ([http://www-cs-faculty.stanford.edu/~knuth/fasc1a.ps.gz Draft of Fascicle 1a] available for download)
* {{cite book |last=Knuth |first=Donald E. |date=2009 |title=[[The Art of Computer Programming]] Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams |edition=1st |publisher=Addison–Wesley Professional |page=272 |isbn=978-0321580504 }} ([http://www-cs-faculty.stanford.edu/~knuth/fasc1a.ps.gz Draft of Fascicle 1a] available for download)
== बाहरी संबंध ==
== बाहरी संबंध ==
* {{cite web |title=Bit Twiddling Hacks |editor-first=Sean Eron |editor-last=Anderson |display-authors=etal |date=2009-11-26 |orig-year=1997 |publisher=[[Stanford University]] |url=https://graphics.stanford.edu/~seander/bithacks.html |access-date=2020-06-01 |url-status=live |archive-url=https://web.archive.org/web/20200601123740/https://graphics.stanford.edu/~seander/bithacks.html |archive-date=2020-06-01}}
* {{cite web |title=Bit Twiddling Hacks |editor-first=Sean Eron |editor-last=Anderson |display-authors=etal |date=2009-11-26 |orig-year=1997 |publisher=[[Stanford University]] |url=https://graphics.stanford.edu/~seander/bithacks.html |access-date=2020-06-01 |url-status=live |archive-url=https://web.archive.org/web/20200601123740/https://graphics.stanford.edu/~seander/bithacks.html |archive-date=2020-06-01}}
Line 97: Line 86:
* [http://aggregate.org/MAGIC/ The Aggregate Magic Algorithms] from University of Kentucky
* [http://aggregate.org/MAGIC/ The Aggregate Magic Algorithms] from University of Kentucky


{{DEFAULTSORT:Bit Manipulation}}[[Category: बाइनरी अंकगणित]] [[Category: कंप्यूटर अंकगणित]]
{{DEFAULTSORT:Bit Manipulation}}
 
 


[[Category: Machine Translated Page]]
[[Category:Created On 19/06/2023|Bit Manipulation]]
[[Category:Created On 19/06/2023]]
[[Category:Lua-based templates|Bit Manipulation]]
[[Category:Machine Translated Page|Bit Manipulation]]
[[Category:Pages with script errors|Bit Manipulation]]
[[Category:Templates Vigyan Ready|Bit Manipulation]]
[[Category:Templates that add a tracking category|Bit Manipulation]]
[[Category:Templates that generate short descriptions|Bit Manipulation]]
[[Category:Templates using TemplateData|Bit Manipulation]]
[[Category:कंप्यूटर अंकगणित|Bit Manipulation]]
[[Category:बाइनरी अंकगणित|Bit Manipulation]]

Latest revision as of 14:12, 5 July 2023

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

स्रोत कोड जो बिट प्रकलन करता है बिटवाइज़ संचालन का उपयोग करता है: एं, OR, XOR, NOT और संभवतः बूलियन ऑपरेटरों के अनुरूप अन्य संचालन; बिटवाइज़ ऑपरेशन एक और शून्य को गिनने, उच्च और निम्न एक या शून्य को खोजने, बिट्स को सेट करने, रीसेट करने और परीक्षण करने, फ़ील्ड्स निकालने और डालने, मास्क और शून्य फ़ील्ड्स को समूहित करने और बिट्स को निर्दिष्ट बिट स्थितियों या फ़ील्ड्स से समूहित करने और बिखेरने के लिए बिट शिफ्ट और ऑपरेशन भी हैं।

इस प्रकार पूर्णांक अंकगणितीय ऑपरेटर अन्य ऑपरेटरों के साथ मिलकर बिट-संचालन को भी प्रभावित कर सकते हैं।

बिट प्रकलन, कुछ स्थितियों में, डेटा संरचना पर लूप की आवश्यकता को कम या कम कर सकता है और कई गुना गति दे सकता है, क्योंकि बिट प्रकलन को समानांतर में संसाधित किया जाता है।

शब्दावली

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

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

बिटवाइज़ ऑपरेशन

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

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

बिट प्रकलन का उदाहरण

यह निर्धारित करने के लिए कि क्या कोई संख्या दो की घात है, वैचारिक रूप से हम बार-बार पूर्णांक को दो से विभाजित कर सकते हैं जब तक कि संख्या 2 से समान रूप से विभाजित नहीं होगी; यदि एकमात्र कारक बचा है तो 1 है, मूल संख्या 2 की घात थी। इस प्रकार बिट और तार्किक ऑपरेटरों का उपयोग करके, एक सरल अभिव्यक्ति है जो सही (1) या गलत (0) लौटाएगा:

bool isPowerOfTwo = (x != 0) && ((x & (x - 1)) == 0);

दूसरी छमाही इस तथ्य का उपयोग करती है कि दो की शक्तियों में उनके बाइनरी प्रतिनिधित्व में एक और केवल एक बिट सेट होता है:

x == 0...010...0
एक्स-1 == 0...001...1
एक्स और (एक्स-1) == 0...000...0

इस प्रकार यदि संख्या न तो शून्य है और न ही दो की शक्ति है, तो इसमें एक से अधिक स्थानों पर '1' होगा:

x == 0...1...010...0
x-1 == 0...1...001...1
x & (x-1) == 0...1...000...0

यदि इनलाइन असेंबली भाषा कोड का उपयोग किया जाता है, तो एक निर्देश (पॉपकंट) जो ऑपरेंड में 1 या 0 की संख्या की गणना करता है, उपलब्ध हो सकता है; ठीक एक '1' बिट वाला ऑपरेंड 2 की शक्ति है। चूंकि, इस तरह के निर्देश में उपरोक्त बिटवाइज़ विधि की तुलना में अधिक विलंबता हो सकती है।

बिट प्रकलन संचालन

प्रोसेसर सामान्यतः उपयोगी बिट ऑपरेटरों का केवल एक सबसेट प्रदान करते हैं। प्रोग्रामिंग लैंग्वेज अधिकांश बिट ऑपरेशंस को सीधे समर्थन नहीं करती हैं, इसलिए उन्हें कोड करने के लिए मुहावरों का उपयोग किया जाना चाहिए। उदाहरण के लिए, 'सी' प्रोग्रामिंग भाषा केवल बिट-वार AND(&), OR(|), XOR(^) और NOT(~) प्रदान करती है। फोरट्रान AND(.and.), OR (.or.), XOR (.neqv.) और EQV(.eqv.) प्रदान करता है। इस प्रकार अल्गोल सिंटैक्टिक बिटफ़ील्ड एक्सट्रैक्ट और इंसर्ट प्रदान करता है। इस प्रकार जब भाषाएं बिट ऑपरेशंस प्रदान करती हैं जो सीधे हार्डवेयर निर्देशों को मैप नहीं करती हैं, तो कंपाइलर्स को उपलब्ध ऑपरेटरों से ऑपरेशन को संश्लेषित करना चाहिए।

एक विशेष रूप से उपयोगी बिट ऑपरेशन एक मशीन शब्द के उच्च सेट बिट को खोजने के लिए उपयोग किए जाने वाले अग्रणी शून्यों की गिनती है, चूंकि विभिन्न आर्किटेक्चर पर इसके अलग-अलग नाम हो सकते हैं।[1] कोई सरल प्रोग्रामिंग भाषा मुहावरा नहीं है, इसलिए इसे एक कंपाइलर इंट्रिंसिक या सिस्टम लाइब्रेरी रूटीन द्वारा प्रदान किया जाना चाहिए। इस प्रकार उस ऑपरेटर के बिना, अंकगणितीय संचालन के असममित कैरी-प्रचार के कारण, किसी शब्द के उच्च बिट के संबंध में कोई भी ऑपरेशन करने के लिए यह बहुत महंगा है (पहला सेट # सीएलजेड देखें)। सौभाग्य से, अधिकांश सीपीयू आर्किटेक्चर ने 1980 के दशक के मध्य से प्रदान किया है। साथ में ऑपरेशन काउंट वाले, जिसे पॉपकाउंट भी कहा जाता है, जो मशीन शब्द में सेट बिट्स की संख्या की गणना करता है, सामान्यतः हार्डवेयर ऑपरेटर के रूप में भी प्रदान किया जाता है। इस प्रकार बिट सेट, रीसेट, टेस्ट और टॉगल जैसे सरल बिट ऑपरेशंस अधिकांशतः हार्डवेयर ऑपरेटरों के रूप में प्रदान किए जाते हैं, किन्तु यदि वे नहीं हैं तो आसानी से अनुकरण किए जाते हैं - उदाहरण के लिए (सेट R0, 1; एलएसएचएफटी आर0, आई; या एक्स, आर0) सेट बिट i ऑपरेंड एक्स में।

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

  • निर्दिष्ट बिट स्थिति से स्पष्ट ऊपर (शब्द के निचले हिस्से को छोड़ दें)
  • निर्दिष्ट बिट स्थिति से स्पष्ट नीचे (शब्द के ऊपरी भाग को छोड़ दें)
  • कम बिट नीचे से मुखौटा (स्पष्ट निचला शब्द)
  • हाई बिट अप से मास्क (स्पष्ट निचला शब्द)
  • बिटफील्ड एक्सट्रैक्ट
  • बिटफील्ड डालें
  • बिटफ़ील्ड स्कैटर/एकत्र संचालन जो मशीन शब्द पर बिटफ़ील्ड के सन्निहित भागों को वितरित करते हैं, या शब्द में अलग-अलग बिटफ़ील्ड को बिटफ़ील्ड के एक सन्निहित हिस्से में समूहित करते हैं (हाल ही के इंटेल पीईएक्सटी/पीडीईपी ऑपरेटरों को देखें)। क्रिप्टोग्राफी और वीडियो एन्कोडिंग द्वारा उपयोग किया जाता है।
  • मैट्रिक्स उलटा

कुछ अंकगणितीय संक्रियाओं को सरल संक्रियाओं और बिट संक्रियाओं में घटाया जा सकता है:

  • शिफ्ट-ऐड के अनुक्रम के लिए स्थिरांक से गुणा कम करें

उदाहरण के लिए 9 से गुणा करें, कॉपी ऑपरेंड है, 3 से शिफ्ट करें (8 से गुणा करें), और मूल ऑपरेंड में जोड़ें।

  • शिफ्ट-घटाने के क्रम में निरंतर विभाजन को कम करें।

मास्किंग

एक मुखौटा वह डेटा है जिसका उपयोग बिटवाइज़ संचालन के लिए किया जाता है, विशेष रूप से बिट फ़ील्ड में किया जाता है।

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

यह भी देखें

संदर्भ

  1. On most Intel chips, it's BSR (bitscan reverse), though newer SoCs also have LZCNT (count leading zeros)

अग्रिम पठन

  • Warren, Henry S. (2013). Hacker's Delight (2nd ed.). Addison–Wesley Professional. p. 512. ISBN 978-0321842688.
  • Knuth, Donald E. (2009). The Art of Computer Programming Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams (1st ed.). Addison–Wesley Professional. p. 272. ISBN 978-0321580504. (Draft of Fascicle 1a available for download)

बाहरी संबंध