मुझे लगता है कि प्रश्न का दूसरा भाग:
इसके अलावा, बिटवाइन ऑपरेटर वास्तव में किसके लिए उपयोग किए जाते हैं? मैं कुछ उदाहरणों की सराहना करूंगा।
केवल आंशिक रूप से संबोधित किया गया है। उस मामले पर ये मेरे दो सेंट हैं।
प्रोग्रामिंग भाषाओं में बिटवाइज़ ऑपरेशन बहुत सारे अनुप्रयोगों के साथ काम करते समय एक मौलिक भूमिका निभाता है। लगभग सभी निम्न-स्तरीय कंप्यूटिंग इस तरह के संचालन का उपयोग करके किया जाना चाहिए।
सभी अनुप्रयोगों में जिन्हें दो नोड्स के बीच डेटा भेजने की आवश्यकता होती है, जैसे:
संचार के निचले स्तर की परत में, डेटा आमतौर पर जिसे फ़्रेम कहा जाता है उसमें भेजा जाता है । फ़्रेम बस बाइट्स के तार हैं जो एक भौतिक चैनल के माध्यम से भेजे जाते हैं। इस फ़्रेम में आमतौर पर वास्तविक डेटा प्लस कुछ अन्य फ़ील्ड (बाइट्स में कोडित) होते हैं जो हेडर कहलाते हैं, का हिस्सा होते हैं । हेडर में आमतौर पर बाइट्स होते हैं जो संचार की स्थिति से संबंधित कुछ जानकारी को सांकेतिक शब्दों में बदलना (जैसे, झंडे (बिट्स)), फ्रेम काउंटर, सुधार और त्रुटि का पता लगाने के कोड, आदि। एक फ्रेम में संचरित डेटा प्राप्त करने के लिए, और निर्माण के लिए। फ़्रेम डेटा भेजने के लिए, आपको निश्चित बिटवाइज़ ऑपरेशनों की आवश्यकता होगी।
सामान्य तौर पर, इस तरह के अनुप्रयोगों से निपटने के दौरान, एक एपीआई उपलब्ध होता है ताकि आपको उन सभी विवरणों से निपटना न पड़े। उदाहरण के लिए, सभी आधुनिक प्रोग्रामिंग भाषाएं सॉकेट कनेक्शन के लिए लाइब्रेरी प्रदान करती हैं, इसलिए आपको वास्तव में टीसीपी / आईपी संचार फ्रेम बनाने की आवश्यकता नहीं है। लेकिन उन अच्छे लोगों के बारे में सोचें जिन्होंने आपके लिए उन एपीआई को प्रोग्राम किया था, उन्हें निश्चित रूप से फ्रेम निर्माण से निपटना था; निम्न-स्तर से उच्च-स्तर के संचार के लिए आगे और पीछे जाने के लिए सभी प्रकार के बिटवाइज़ संचालन का उपयोग करना।
एक ठोस उदाहरण के रूप में, कल्पना करें कि कोई आपको एक फ़ाइल देता है जिसमें कच्चा डेटा होता है जिसे सीधे दूरसंचार हार्डवेयर द्वारा कैप्चर किया गया था। इस मामले में, फ़्रेम को खोजने के लिए, आपको फ़ाइल में कच्ची बाइट्स को पढ़ना होगा और डेटा को थोड़ा-थोड़ा स्कैन करके किसी प्रकार के सिंक्रनाइज़ेशन शब्द खोजने की कोशिश करनी होगी। तुल्यकालन शब्द की पहचान करने के बाद, आप वास्तविक फ्रेम मिलता है, और करने की आवश्यकता होगी शिफ्ट (और है कि बस कहानी की शुरुआत है) वास्तविक डेटा है कि प्रेषित किया जा रहा प्राप्त करने के लिए यदि आवश्यक हो तो उन्हें।
आवेदन का एक और बहुत ही निम्न स्तर का परिवार है जब आपको कुछ (प्राचीन) बंदरगाहों, जैसे समानांतर और सीरियल पोर्ट का उपयोग करके हार्डवेयर को नियंत्रित करने की आवश्यकता होती है। इस पोर्ट को कुछ बाइट्स सेट करके नियंत्रित किया जाता है, और निर्देशों के संदर्भ में उस बाइट के प्रत्येक बिट का एक विशिष्ट अर्थ होता है, उस पोर्ट के लिए (उदाहरण के लिए देखें http://en.wikipedia.org/wiki/Parallel_port )। यदि आप ऐसे सॉफ़्टवेयर का निर्माण करना चाहते हैं जो उस हार्डवेयर के साथ कुछ करता है तो आपको उन निर्देशों का अनुवाद करने के लिए बिटवाइज़ संचालन की आवश्यकता होगी जिन्हें आप उस बाइट्स को निष्पादित करना चाहते हैं जिसे पोर्ट समझते हैं।
उदाहरण के लिए, यदि आपके पास कुछ अन्य डिवाइस को नियंत्रित करने के लिए समानांतर पोर्ट से जुड़े कुछ भौतिक बटन हैं, तो यह कोड की एक पंक्ति है जिसे आप सॉफ्ट एप्लिकेशन में पा सकते हैं:
read = ((read ^ 0x80) >> 4) & 0x0f;
आशा है कि यह योगदान देगा।