2016-06-03 16 views
5

संरचना में pthread लाइब्रेरी पढ़ना निम्नलिखित परिभाषित किया गया है:1 बिट मान कैसे असाइन करें?

struct ptw32_thread_t_ 
{ 
     .... 
     int implicit:1; 
     ...... 
}; 

मैं समझता हूँ कि यह केवल 1 बिट तो कब्जा कैसे ओवरफ्लो त्रुटि झंडे को सक्रिय संकलन त्रुटि देता है के साथ सौंपा हर मूल्य के रूप में यह करने के लिए मूल्य देने के लिए:

ptw32_thread_t *sp; 
sp = (ptw32_thread_t *) calloc (1, sizeof(ptw32_thread_t)); 
sp->implicit = 1; 

error: overflow in implicit constant conversion [-Werror=overflow] 
+5

इसे हस्ताक्षरित करें। एक 1-बिट हस्ताक्षरित दो के पूरक पूर्णांक केवल दो मान रख सकता है: -1 और 0. तो 1 एक अतिप्रवाह स्थिति है। –

+0

@TomKarzes धन्यवाद tom – Vineet1982

+0

@unwind आपके द्वारा लिंक किया गया प्रश्न डुप्लिकेट नहीं है। – fuz

उत्तर

5

यह एक बुरा विचार है कि 1-बिट int है, क्योंकि यह एक हस्ताक्षरित प्रकार है। हस्ताक्षर किए जाने पर आप 1 बिट का उपयोग करके 1 का प्रतिनिधित्व नहीं कर सकते हैं, आप केवल 0 और -1 का प्रतिनिधित्व कर सकते हैं, जो थोड़ा अजीब है।

समाधान unsigned int implicit : 1 बनाना है।

संबंधित मुद्दे