मेरे पास एक हस्ताक्षरित पूर्णांक है लेकिन जब मैं इसे% d का उपयोग करके प्रिंट करता हूं तो कभी-कभी नकारात्मक मान होता है?सी बिना हस्ताक्षर किए गए int को ऋणात्मक मूल्य प्रदान करना?
उत्तर
यह काम करना चाहिए:
unsigned int a;
printf("%u\n", a);
स्पष्टीकरण: सबसे आर्किटेक्चर पर, पर हस्ताक्षर किए पूर्णांक two's complement में प्रतिनिधित्व कर रहे हैं। इस प्रणाली में, सकारात्मक संख्या 2**(N-1)
(जहां N = sizeof(int)
) से कम है, इस पर ध्यान दिए बिना कि आप int
या unsigned int
का उपयोग कर रहे हैं या नहीं। हालांकि, अगर आपके हस्ताक्षरित int में संख्या 2**(N-1)
से बड़ी है, तो यह दो के पूरक के तहत एक नकारात्मक हस्ताक्षरित संख्या का प्रतिनिधित्व करती है - जो printf
ने आपको "%d"
पास करने पर दिया था।
प्रिंटिंग %d
इसके परिभाषित प्रकार के बावजूद, एक हस्ताक्षरित दशमलव संख्या के रूप में पूर्णांक को पढ़ेगा।
हस्ताक्षरित संख्या मुद्रित करने के लिए, %u
का उपयोग करें।
यह परिवर्तनीय तर्कों को संभालने के लिए सी के तरीके के कारण होता है। कंपाइलर केवल स्टैक से मूल्य खींचता है (void*
के रूप में टाइप किया गया है और कॉल स्टैक को इंगित करता है) और printf
को यह पता लगाना होगा कि उस प्रारूप स्ट्रिंग से डेटा में क्या है।
यही कारण है कि आप प्रारूप स्ट्रिंग की आपूर्ति करने की जरूरत है - सी RTTI का कोई रास्ता नहीं है या एक 'आधार वर्ग' (जावा में Object
, उदाहरण के लिए) से एक सामान्य या पूर्वनिर्धारित toString
प्राप्त करने के लिए है।
नाइटपिक: सी मूल्य से कॉल किया जाता है, इसलिए संकलक तर्क मान खींचता है, पॉइंटर्स नहीं। आप पॉइंटर्स को मानों (printf ("% u", और myvariable) को पास नहीं करते हैं;), आप सीधे मान पास करते हैं (printf ("% u", myvariable);)। – unwind
यह वास्तव में ढेर के लिए 'printf' एक सूचक देता है, हालांकि। – LiraNuna
@LiraNuna - varargs फ़ंक्शन का कार्यान्वयन निर्दिष्ट नहीं है, यही कारण है कि न तो '# परिभाषित va_copy (dest, src) dest = src' या' # परिभाषित va_copy (dest, src) memcpy (dest, src, sizeof (va_list)) 'सिस्टम पर 'va_copy' मैक्रो के लिए एक पोर्टेबल प्रतिस्थापन है जहां यह प्रदान नहीं किया गया है। उनमें से एक काम कर सकता है, लेकिन कौन जानता है? –
% डी का अर्थ है printf मूल्य को int (जिसे हस्ताक्षरित किया गया है) के रूप में समझेंगे। यदि आप एक हस्ताक्षरित int है तो% u का उपयोग करें।
- 1. बिना हस्ताक्षर किए गए Int
- 2. जावा में बिना हस्ताक्षर किए गए int
- 3. जेएनआई: बिना हस्ताक्षर किए गए int को जिंट
- 4. डिफ़ॉल्ट int प्रकार: हस्ताक्षरित या हस्ताक्षर किए गए?
- 5. बिना हस्ताक्षर किए गए चार *
- 6. PHP बिना हस्ताक्षर किए गए दाएं शिफ्ट -
- 7. लूप के लिए सी और सी ++ के लिए उपयोग किए गए हस्ताक्षर किए गए int की बजाय int क्यों है?
- 8. हस्ताक्षर किए गए पूर्णांक अंडरफ़्लो
- 9. बिना हस्ताक्षर किए गए चार में 4 बिट्स कैसे बदलें?
- 10. बीकोड कोडित दशमलव (बीसीडी) को बिना हस्ताक्षर किए गए पूर्णांक
- 11. हस्ताक्षर किए गए चार *
- 12. mysql tinyint हस्ताक्षर किए गए
- 13. जावा हस्ताक्षर किए गए जार को एकाधिक हस्ताक्षर एल्गोरिदम
- 14. बिना हस्ताक्षर किए गए char को stdterpret_cast के बिना std :: string में प्राप्त करने का तरीका?
- 15. जेपीए और हाइबरनेट में बिना हस्ताक्षर किए गए इंट
- 16. हस्ताक्षर/हस्ताक्षरित शॉर्ट/int
- 17. सी ++: साइन किए गए/हस्ताक्षरित मेल नहीं खाते जब केवल हस्ताक्षर किए गए प्रकार
- 18. जावा रिटर्न का उपयोग कर फेसबुक पर हस्ताक्षर किए गए हस्ताक्षर किए गए JSON
- 19. हस्ताक्षर किए गए शून्य लिनक्स बनाम विंडोज
- 20. सी # में हस्ताक्षर किए गए सीएलआर प्रकारों का उपयोग क्यों करना मुश्किल है?
- 21. 8 अंकों वाले हेक्साडेसिमल संख्या में हस्ताक्षर किए गए int को कैसे प्रारूपित करें?
- 22. वर्णनकर्ता और पायथन-प्रदान किए गए गुण
- 23. जावा लंबे समय तक हस्ताक्षर किए बिना बराबर?
- 24. लेबल किए गए लूप को दूर करना
- 25. सी # हस्ताक्षरित int डिफ़ॉल्ट मान
- 26. हस्ताक्षर किए गए चार सूचक का उपयोग कब करें
- 27. मैक्रो यह जांचने के लिए कि एक पूर्णांक प्रकार पर हस्ताक्षर किए गए हैं या हस्ताक्षर किए गए हैं
- 28. नेट संहिता पर हस्ताक्षर करना मूल्य निर्धारण
- 29. अगर कथन की तुलना में हस्ताक्षरित हस्ताक्षर किए गए हैं?
- 30. बिना हस्ताक्षर किए गए char का परिणाम << unsigned char हस्ताक्षरित नहीं है char
देखें कि क्या आपके कंपाइलर के पास इस तरह की त्रुटि के बारे में चेतावनी देने का विकल्प है। यह है - जीसीसी के साथ वर्फैट। –
संभावित डुप्लिकेट [मैं एक हस्ताक्षरित पूर्णांक के अधिकतम मूल्य को कैसे मुद्रित कर सकता हूं?] (Http://stackoverflow.com/questions/12812812/how-can-i-print-maximum-value-of-an-unsigned-integer) –