बिट प्रकलन

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

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

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

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

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

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

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

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

दूसरी छमाही इस तथ्य का उपयोग करती है कि दो की शक्तियों में उनके बाइनरी प्रतिनिधित्व में एक और केवल एक बिट सेट होता है: x == 0...0 1 0...0 एक्स-1 == 0...001...1 एक्स और (एक्स-1) == 0...000...0

यदि संख्या न तो शून्य है और न ही दो की शक्ति है, तो इसमें एक से अधिक स्थानों पर '1' होगा: x == 0... 1 ...0 1 0...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.) प्रदान करता है। अल्गोल सिंटैक्टिक बिटफ़ील्ड एक्सट्रैक्ट और इंसर्ट प्रदान करता है। जब भाषाएं बिट ऑपरेशंस प्रदान करती हैं जो सीधे हार्डवेयर निर्देशों को मैप नहीं करती हैं, तो कंपाइलर्स को उपलब्ध ऑपरेटरों से ऑपरेशन को संश्लेषित करना चाहिए।

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

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

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

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

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

यह भी देखें

 * बिट सरणी
 * थोड़ा पीटना
 * बिट फील्ड
 * बिट हेरफेर निर्देश सेट - x86 निर्देश सेट के लिए बिट हेरफेर एक्सटेंशन।
 * बिट विधेय
 * बिट विशिष्टता (बहुविकल्पी)
 * बिट ट्विडलर (बहुविकल्पी)
 * निबल - डेटा की इकाई जिसमें 4 बिट या आधा बाइट होता है
 * भविष्यवाणी (कंप्यूटर आर्किटेक्चर) जहां वेक्टर प्रोसेसर में बिट मास्क का उपयोग किया जाता है
 * एकल-घटना परेशान

अग्रिम पठन

 * (Draft of Fascicle 1a available for download)
 * (Draft of Fascicle 1a available for download)

बाहरी संबंध

 * Bit Manipulation Tricks with full explanations and source code
 * Intel Intrinsics Guide
 * xchg rax, rax: x86_64 riddles and hacks
 * The Aggregate Magic Algorithms from University of Kentucky
 * The Aggregate Magic Algorithms from University of Kentucky