Wednesday 15 September 2010

bit manipulation - Please explain in detail the logic behind the output of x &(~0 << n) -


मुझे x & amp; (~ 0 & lt; & lt; n) के पीछे तर्क में संदेह है।
सबसे पहले मैं ~ 0 का अर्थ नहीं मिल सका। जब मैंने इसे जावा में करने की कोशिश की तो यह -1 दिखाया। हम बाइनरी में -1 का प्रतिनिधित्व कैसे कर सकते हैं और इसे सकारात्मक संख्याओं से अलग कर सकते हैं?

< P> नकारात्मक संख्या का प्रतिनिधित्व करने के लिए सबसे आम तरीका (और जिस तरह से जावा का उपयोग करता है) को कहा जाता है। जैसा कि मेरी टिप्पणी में बताया गया है, इस प्रणाली में नकारात्मक गणना करने का एक तरीका है -x = ~ (x - 1) । उदाहरण के लिए, 8bit में,
  00000001 // 1 00000000 एक अन्य, समकक्ष तरीका,  -x = ~ x + 1   

है। // 1 - 1 11111111 // ~ (1 - 1) = ~ 0 = -1

एक को जोड़कर 11111111 शून्य पर लपेटता है - यह समझ में आता है कॉल करने के लिए "जैसे कि एक को जोड़कर इसका परिणाम शून्य" शून्य से होता है।

उच्चतम बिट सेट के साथ संख्या को नकारात्मक माना जाता है।

विकिपीडिया आलेख I अधिक जानकारी है।

के लिए के रूप में x & amp; (~ 0 & lt; & lt; n) , ~ 0 "सभी लोगों" का प्रतिनिधित्व करने का एक तरीका है (जो भी -1 होता है, जो वास्तव में इस प्रयोग के लिए अप्रासंगिक है) । ज्यादातर n के लिए, "सब लोग" को n द्वारा बायीं ओर स्थानांतरित कर दिया गया है, जिसके बाद n शून्य हो।

कुल में, यह अभिव्यक्ति निम्न n बिट्स को x को साफ़ करती है। कम से कम, 0 & lt; = n & lt; = 31 के लिए

एक & lt; & lt; N जावा में, जहां a एक int है, वह a & lt; & lt; (एन एंड ए 31)

No comments:

Post a Comment