तो मुझे लगता है कि यह प्रश्न पहले से ही पूछा जा चुका है, हालांकि उत्तर थोड़ा अस्पष्ट और अनुपयोगी थे। ठीक है, मैं केवल का उपयोग कर एक सी अभिव्यक्ति लागू करने की आवश्यकता "&^~ + | >> < <!"बिटवाई ऑपरेटरों का उपयोग कर सशर्त वक्तव्य
अभिव्यक्ति के समान की जरूरत है: एक? ख: ग
तो, मैं क्या बता कर लिया है से, अभिव्यक्ति की तरह कुछ देखने के लिए की जरूरत है:
return (a & b) | (~a & c)
यह काम करता है जब एक = 0, क्योंकि ख के साथ anding यह दे देंगे शून्य, और फिर अभिव्यक्ति दाएं तरफ वापस आ जाएगी, (~a & c)
जो काम करता है क्योंकि ~ 0 सभी को देता है, और सभी के साथ एंडिंग सी सी देता है।
हालांकि, यह काम नहीं करता है जब कोई> 0। क्या कोई यह समझाने की कोशिश कर सकता है कि यह क्यों है, या इसे कैसे ठीक किया जाए?
यह वास्तव में सही है। तो क्यों एक जोड़ना थोड़ा सेट या साफ़ करता है? मैं समझता हूं कि ऐसा क्यों होना चाहिए, लेकिन मुझे नहीं पता कि यह कैसे होता है। – atb
अगर हम 0 के साथ शुरू करते हैं, तो बिट्स को फ़्लिप करने से सभी को मिल जाता है। जब हम एक जोड़ते हैं, तो वे सभी शून्य पर वापस जाते हैं (और लेयर सेट हो जाता है, लेकिन हम इसे अनदेखा करते हैं)। अगर हम 1 से शुरू करते हैं, तो बिट्स को फिसलने से 111 ... 10 मिलता है। 1 जोड़ना जो पिछले 0 से 1 तक चलता है, इसलिए सभी बिट्स अब 1 हैं। –
'y = ~ x + 1' भाग मुझे उलझन में मिला; आखिरकार मैंने यह पाया कि यह x = 0 के मामले में पूर्णांक ओवरफ़्लो के कारण काम करता है, लेकिन यह स्पष्ट नहीं है। मेरे लिए अधिक स्पष्ट समाधान पहली बार बाएं शिफ्ट (00000001 => 10000000) के साथ एमएसबी को एलएसबी में स्थानांतरित करना था और फिर सही शिफ्ट के साथ एमएसबी की प्रतिलिपि बनाना: 'y = (x << 31) >> 31' –