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

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Algorithmically modifying data below the word level}}
{{Short description|Algorithmically modifying data below the word level}}
[[ अंश | अंश]] हेरफेर एक [[शब्द (डेटा प्रकार)]] से कम बिट्स या [[डेटा (कंप्यूटिंग)]] के अन्य टुकड़ों को [[ कलन विधि | कलन विधि]] से छेड़छाड़ करने का कार्य है। [[कंप्यूटर प्रोग्रामिंग]] कार्यों में बिट हेरफेर की आवश्यकता होती है जिसमें निम्न-स्तरीय उपकरण नियंत्रण, त्रुटि का पता लगाने और [[त्रुटि सुधार]] एल्गोरिदम, डेटा संपीड़न, [[ कूटलेखन | कूटलेखन]] एल्गोरिदम और [[अनुकूलन (कंप्यूटर विज्ञान)]] सम्मिलित हैं। अधिकांश अन्य कार्यों के लिए, आधुनिक [[प्रोग्रामिंग भाषा]]एँ [[प्रोग्रामर]] को उन अमूर्तताओं का प्रतिनिधित्व करने वाले बिट्स के अतिरिक्त सीधे अमूर्तता (कंप्यूटर विज्ञान) के साथ काम करने की अनुमति देती हैं।
'''[[ अंश |बिट]] हेरफेर''' एक [[शब्द (डेटा प्रकार)]] से कम बिट्स या [[डेटा (कंप्यूटिंग)]] के अन्य टुकड़ों को [[ कलन विधि | कलन विधि]] से छेड़छाड़ करने का कार्य है। [[कंप्यूटर प्रोग्रामिंग]] कार्यों में बिट हेरफेर की आवश्यकता होती है जिसमें निम्न-स्तरीय उपकरण नियंत्रण, त्रुटि का पता लगाने और [[त्रुटि सुधार]] एल्गोरिदम, डेटा संपीड़न, [[ कूटलेखन | एन्क्रिप्शन]] एल्गोरिदम और [[अनुकूलन (कंप्यूटर विज्ञान)]] सम्मिलित हैं। अधिकांश अन्य कार्यों के लिए, आधुनिक [[प्रोग्रामिंग भाषा]]एँ [[प्रोग्रामर]] को उन बिट्स के बजाय सीधे एब्स्ट्रैक्शन के साथ काम करने की अनुमति देती हैं जो उन एब्स्ट्रैक्शन का प्रतिनिधित्व करते हैं।


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


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


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


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


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


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


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


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


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Line 49: Line 50:
* बिटफील्ड एक्सट्रैक्ट
* बिटफील्ड एक्सट्रैक्ट
* बिटफील्ड डालें
* बिटफील्ड डालें
*बिटफ़ील्ड स्कैटर/एकत्र संचालन जो मशीन शब्द पर बिटफ़ील्ड के सन्निहित भागों को वितरित करते हैं, या शब्द में अलग-अलग बिटफ़ील्ड को बिटफ़ील्ड के एक सन्निहित हिस्से में इकट्ठा करते हैं (हाल ही के इंटेल PEXT/PDEP ऑपरेटरों को देखें)। क्रिप्टोग्राफी और वीडियो एन्कोडिंग द्वारा उपयोग किया जाता है।
*बिटफ़ील्ड स्कैटर/एकत्र संचालन जो मशीन शब्द पर बिटफ़ील्ड के सन्निहित भागों को वितरित करते हैं, या शब्द में अलग-अलग बिटफ़ील्ड को बिटफ़ील्ड के एक सन्निहित हिस्से में इकट्ठा करते हैं (हाल ही के इंटेल पीईएक्सटी/पीडीईपी ऑपरेटरों को देखें)। क्रिप्टोग्राफी और वीडियो एन्कोडिंग द्वारा उपयोग किया जाता है।
* मैट्रिक्स उलटा
* मैट्रिक्स उलटा
कुछ अंकगणितीय संक्रियाओं को सरल संक्रियाओं और बिट संक्रियाओं में घटाया जा सकता है:
कुछ अंकगणितीय संक्रियाओं को सरल संक्रियाओं और बिट संक्रियाओं में घटाया जा सकता है:

Revision as of 13:44, 2 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 की शक्ति है। चूंकि, इस तरह के निर्देश में उपरोक्त बिटवाइज़ विधि की तुलना में अधिक विलंबता हो सकती है।

बिट हेरफेर संचालन

प्रोसेसर सामान्यतः उपयोगी बिट ऑपरेटरों का केवल एक सबसेट प्रदान करते हैं। प्रोग्रामिंग लैंग्वेज अधिकांश बिट ऑपरेशंस को सीधे सपोर्ट नहीं करती हैं, इसलिए उन्हें कोड करने के लिए मुहावरों का उपयोग किया जाना चाहिए। उदाहरण के लिए, 'C' प्रोग्रामिंग भाषा केवल बिट-वार 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)

बाहरी संबंध