c - सी++ प्रोग्राम्स




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

मैंने के एंड आर 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 क्या मतलब है?


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

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

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

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

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

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

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

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


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





bit