बिटवाइज़ ऑपरेशंस का उपयोग करने के क्या फायदे हैं? [बन्द है]


19

नवीनतम कोडप्रोजेक्ट न्यूज़लेटर को पढ़ने के बाद, मैं इस लेख को बिटवाइज़ ऑपरेशंस पर ले आया । यह दिलचस्प पढ़ने के लिए बनाता है, और मैं निश्चित रूप से यह जांचने का लाभ देख सकता हूं कि क्या पूर्णांक सम या विषम है, लेकिन यदि n-th बिट सेट है तो परीक्षण? संभवतः इसके क्या फायदे हो सकते हैं?

जवाबों:


27

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

जब एक बाधा आग लग जाती है तो यह आम तौर पर एक स्थिति रजिस्टर में थोड़ा सा सेट करती है ताकि एक एकल सेवा दिनचर्या बाधित होने का सटीक कारण निर्धारित कर सके। व्यक्तिगत बिट्स का परीक्षण करना बाधा स्रोत के तेजी से डिकोड के लिए अनुमति देता है।

कई एम्बेडेड सिस्टम में उपलब्ध कुल रैम 64, 128 या 256 BYTES हो सकता है (यानी बाइट्स किलोबाइट या मेगाबाइट नहीं है) इस वातावरण में एक बाइट का उपयोग कई डेटा आइटम, बूलियन झंडे आदि को संग्रहीत करने और फिर बिट संचालन का उपयोग करने के लिए किया जाता है। इन्हें सेट करना और पढ़ना।

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


4
अधिक बूलियन बिट संचालन और अनुकूलन में रुचि रखने वालों के लिए, हैकर डिलाइट पर एक नज़र डालें: amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654
gablin

7

मूल रूप से, आप उन्हें आकार और गति के विचारों के कारण उपयोग करते हैं। बिटवाइज़ ऑपरेशन अविश्वसनीय रूप से सरल हैं और इस प्रकार आमतौर पर अंकगणितीय संचालन की तुलना में तेज़ होते हैं। उदाहरण के लिए एक आरजीबी मूल्य का हरा हिस्सा प्राप्त करने के लिए, अंकगणितीय दृष्टिकोण है (rgb / 256) % 256। बिटवाइज़ ऑपरेशन के साथ आप कुछ ऐसा करेंगे (rgb >> 8) & 0xFF। उत्तरार्द्ध काफी तेज है और एक बार जब आप इसे करने के लिए उपयोग कर रहे हैं, तो यह भी आसान है। जब आप एक कॉम्पैक्ट और तेज़ तरीके से डेटा को एनकोड / डीकोड करने की आवश्यकता होती है, तो आम तौर पर बिटवाइज़ ऑपरेशन बहुत अधिक मात्रा में आते हैं।


2
BYTE g1 = (rgb / 256) % 256; 00E51013...C1 E9 08...shr ecx,8 00E51016...88 0C 24...mov byte ptr [esp],cl
रवांग

4

इस तरह के ऑपरेशन का उपयोग अक्सर एम्बेडेड सिस्टम के लिए लिखते समय किया जाता है जहां मेमोरी या सीपीयू पावर प्रतिबंधित है।

उदाहरण के लिए, अंतरिक्ष को बचाने के लिए आप एक बूलियन का प्रतिनिधित्व करने के लिए प्रत्येक बिट का उपयोग करके एक एकल 8-बिट अंतर में कई चर स्टोर कर सकते हैं। फिर आपको विशिष्ट बिट सेट करने या बिट मान प्राप्त करने के लिए तेज़ तरीके की आवश्यकता होती है।

आमतौर पर जब गीगाबाइट मेमोरी वाले डेस्कटॉप पीसी पर उच्च स्तरीय भाषाओं में सी # जैसी प्रोग्रामिंग की जाती है, तो आप वास्तव में इस बात की परवाह नहीं करते हैं कि प्रत्येक bool पूरी तरह से ले जाता है । लेकिन अगर आप सी में एक माइक्रोकंट्रोलर को 2kb मेमोरी के साथ प्रोग्रामिंग कर रहे हैं, तो हर एक बिट गिना जाता है, इसलिए 8 बूल को एक बाइट में पैक करने की क्षमता महत्वपूर्ण हो सकती है।


.NET में वह [Flags]विशेषता है जो Enumबिट फ़ील्ड के रूप में उपयोग करने की अनुमति देता है । उदाहरण के लिए, Fontएक Styleसंपत्ति होती है जो बोल्ड, इटैलिक, अंडरलाइन और स्ट्राइकथ्रू युक्त एक छोटा सा क्षेत्र होती है।
प्रात:

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

"लेकिन परीक्षण अगर n-वें बिट सेट है? संभवतः इसके क्या फायदे हो सकते हैं?" इसलिए यह बिंदु है - लेकिन चूंकि कोई भाषा निर्दिष्ट नहीं की गई थी, इसलिए मैंने एक उत्तर पर एक टिप्पणी के रूप में दर्ज करने का फैसला किया जहां सी # का उल्लेख किया गया था। यह आपके उत्तर पर टिप्पणी नहीं है, यह एक जोड़ है, या अच्छा-पता है, या जो भी हो।
डेल्ट्रीम

@ डैल्ट्रीम: ओह, कूल।
साइमन पी स्टीवंस

3

बिटकॉइन संचालन का उपयोग अक्सर वीडियो और ऑडियो कोडेक्स में भी किया जाता है, उसी कारण से एम्बेडेड इलेक्ट्रॉनिक्स में; जब आप एक सुपर-कुशल वीडियो कोडेक बनाना चाहते हैं, तो पांच झंडे और ग्यारह बिट टाइमर को आधा इंट में पैक करने में सक्षम होना बहुत उपयोगी है।

वास्तव में, MPEG 4 भी चर-बिट-लंबाई फ़ील्ड के लिए घातीय गॉम्ब एन्कोडिंग का उपयोग करता है । एक मान जो 17 या 19 बिट्स चौड़ा था, वह पैकेट केवल तीन या पांच बिट्स वाला चौड़ा हो सकता है - और आप बिटवाइज़ ऑपरेशंस के साथ उसका पता लगा लेंगे।


2

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

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

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

इसी तरह, SIMD केवल 16-बिट, 32-बिट या 64-बिट जैसे व्यापक तत्वों के लिए अतिरिक्त कार्यान्वयन के बिना, समानांतर 8-बिट जोड़ का समर्थन कर सकता है। उनका अनुकरण करने के लिए, किसी को 8-बिट गणना परिणाम से साइन बिट निकालने की आवश्यकता है, फिर अगले तत्व पर कैरी ऑपरेशन करें।


0

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


1
यह एक बल्कि रूढ़िवादी जवाब है।
इसका कर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.