c सी प्रोग्रामिंग-बिटवे ऑपरेटर्स और जानने का उपयोग करना




सी++ प्रोग्राम्स (3)

यह एक सवाल नहीं है , यह एक पूरी गुच्छा है। :)

  1. जब आप किसी संख्या को एक पूर्णांक के बजाय बिट्स के संग्रह के रूप में देखना चाहते हैं, तो आप bitwise ऑपरेटरों का उपयोग करते हैं गणितीय समतुल्य ऑपरेशन बनाने की तुलना में यह कहना बहुत आसान है कि "मैं चाहता हूं कि इस बिट-पैटर्न ने बाईं ओर दो बिट्स को स्थानांतरित कर दिया"। वे अवधारणात्मक रूप से अलग हैं; अगर आप बिट्स के रूप में संख्या के बारे में सोचते हैं, तो बिट-ऑपरेटर का इस्तेमाल करने से अधिक समझ होती है।
  2. & 0xffff सुनिश्चित करता है कि मूल्य 16 बिट्स है, सभी उच्च बिट्स को मास्किंग करके। यह मानता है कि सिस्टम का unsigned long कम से कम 16 बिट चौड़ा है, जो कि एक सुंदर सुरक्षित धारणा है। & (bitwise AND ) अक्सर इस प्रयोजन के लिए उपयोग किया जाता है तार्किक संयोजन के लिए सच्चाई की तरफ देखें और सोचें कि "यह झूठी 0 है, सच 1 है" यह देखने के लिए कि यह कैसे काम करता है।
  3. & हेक्साडेसिमल स्थिरांक से पहले है सी के बिटवाइस और ऑपरेटर, जो मास्किंग करने के लिए प्रयोग किया जाता है जो मैं ऊपर वर्णित करता हूं। असल में, सिंगल-बिट वेरिएबल्स a & b , परिणाम 1 यदि और केवल अगर a और b दोनों 1 हैं। ऑपरेटर इस तर्क को इसके इनपुट शब्दों में बिट्स की प्रत्येक जोड़ी पर लागू करता है।
  4. ~ ऑपरेटर सी की बिटवर्ड उलटा है, यह अपने तर्क के बिट्स को "फ्लिप करता है" यह आमतौर पर मुखौटे बनाने के लिए प्रयोग किया जाता है।

मैंने के एंड आर II सी प्रोग्रामिंग एएनएसआई सी बुक में पढ़ा है कि ">>" और "<<" ऑपरेटर बिट्स को नियंत्रित करते हैं, और निश्चित रूप से मेरे साथ एक नॉक होने पर, मुझे समझ में नहीं आता कि उनका उपयोग कब करना है। मुझे मैन्युअल रूप से पैकेट बनाने का पता लगाने में दिलचस्पी है और मैं निम्नलिखित स्निपेट पर आया हूं:

unsigned short csum(unsigned short *buf, int nwords)
{       
        unsigned long sum;
        for(sum=0; nwords>0; nwords--)
                sum += *buf++;
        sum = (sum >> 16) + (sum &0xffff);
        sum += (sum >> 16);
        return (unsigned short)(~sum);
}

मुझे पता है कि यह चेकसम की गणना करता है, लेकिन मुझे नहीं पता कि यहाँ क्या हो रहा है। एक्सडी

जाहिर है यह मेरी कौशल रेंज से बाहर है, लेकिन मुझे लगता है कि मैं इस स्निपेट को एक बलि का बकरा के रूप में इस्तेमाल कर सकता हूं ताकि कुछ अनुत्तरित सवालों का पता लगा सके। जब आप जानते हैं कि विशिष्ट मूल्य प्राप्त करने के लिए बिटवार ऑपरेटर्स का उपयोग कब करना है, तो क्यों न केवल (+) या घटाएं (-)? इसके अलावा, वहाँ एक हेक्साडेसिमल &0xffff क्यों sum बगल में है, अगर दो ऑपरेटर्स नहीं हैं?

पीएस क्या है? ~sum क्या मतलब है?


आप जिस चीज के बारे में बात कर रहे हैं, उसके बारे में बिट स्तर पर आपरेशन के साथ क्या करना है उदाहरण के लिए "var >> num" var को num के द्वारा दाईं ओर स्थानांतरित करता है (जिसका अर्थ है कि यह 2 ^ num के द्वारा वरीयता देता है)। इसके अलावा ~ var var स्तर को बिट स्तर पर (जैसे। यदि var = 5 में बिट नोटेशन = 101 ----> ~ var = 010)


जब आप जानते हैं कि एक निश्चित मान हासिल करने के लिए बिटवार ऑपरेटरों का उपयोग कब किया जाए

जब आप किसी ऑब्जेक्ट के व्यक्तिगत बिट्स पर काम करना चाहते हैं, और सरल पूर्णांक अंकगणित या तो पर्याप्त नहीं होंगे, या कोड के इरादे का स्पष्ट रूप से वर्णन करेंगे।

मुझे पता है यह सहज लगता है, लेकिन यह वास्तव में उस के रूप में सरल है

वहाँ sum आगे एक हेक्साडेसिमल &0xffff क्यों है

& bitwise- और ऑपरेटर है इस स्थिति में, इसका उपयोग बिटमैस्क प्राप्त करने के लिए किया जाता है।

~sum मतलब क्या है?

~ बिटवर्ड-व्युत्क्रम ऑपरेशन है; यह प्रत्येक बिट के मूल्य को बदल देता है

मुझे उम्मीद है कि इनमें से प्रत्येक ऑपरेटरों को सीखे जाने वाले सभी पुस्तकों में समझाया जाएगा।





bit