बनाते हैं। a:4
लिखकर आप केवल 4 बिट्स मेमोरी आवंटित करने के लिए कह रहे हैं, जो वास्तविक संख्या के लिए 3 बिट छोड़ देता है। तो हमारी प्रभावी सीमा [-8,7]
है। चूंकि सभी 1 का -1 है, नकारात्मक पक्ष पर एक अतिरिक्त संख्या है। इस पर एक स्पष्टीकरण के लिए, उपर्युक्त लिंक देखें।
9, (हस्ताक्षरित) बाइनरी में है: 1001
। जब आप इसे a
(हस्ताक्षरित) में डालते हैं, तो आपको प्रारंभिक 1 के कारण a
ऋणात्मक होता है, और निम्न संख्या 001
होती है, इसलिए हम अधिकतम नकारात्मक संख्या में 1 जोड़ते हैं, जिससे हमें -7 प्रदान करते हैं।
यदि आप केवल 4 बिट्स में नंबर 9 स्टोर करना चाहते हैं, तो आपको unsigned int
का उपयोग करने की आवश्यकता है, जो आपको [0, 15]
की एक श्रृंखला प्रदान करेगा।
संपादित करें:
मामले में किसी को भी पता लगाना 1001
कैसे हस्ताक्षर किए से जूझ रहा है हमें -7 देता है, निम्नलिखित पर विचार:
1111
-1 है के बाद से, कुछ चर value = -1
करते हैं। स्थिति मैं, मैं कहाँ = 0 है पर {0,1:
एक नकारात्मक के मूल्यों पता लगाने के लिए (हस्ताक्षरित) int num
, हमें निरूपित मैंnum
में जाने एक्स:
एक्स मैं कम से कम महत्वपूर्ण बिट)},
फिर, हर एक्स मैं = 0 के लिए, घटाना 2 मैं value
से।
उदाहरण:
1001
:
value
= -1 - 2 - 2 = -7
स्रोत
2013-07-13 17:40:27
बिटफील्ड में 'int' डिफ़ॉल्ट रूप से' हस्ताक्षरित int 'हो सकता है। ऐसा लगता है कि ओपी के मामले में नहीं है, लेकिन यह दस्तावेज पढ़ने के लिए कभी दर्द नहीं होता है। –
अच्छा सवाल और बहुत अच्छा जवाब! मैंने सत्यापित किया कि हस्ताक्षरित प्रकार अपेक्षित उत्तर देगा। – lsk
@ user1930928 धन्यवाद। :) –