"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > दो के पूरक में हस्ताक्षरित पूर्णांक के लिए fmt.Printf आउटपुट "-101" क्यों प्रदर्शित करता है?

दो के पूरक में हस्ताक्षरित पूर्णांक के लिए fmt.Printf आउटपुट "-101" क्यों प्रदर्शित करता है?

2024-11-13 को प्रकाशित
ब्राउज़ करें:104

Why Does fmt.Printf Output \

दो का पूरक और fmt.Printf बाइनरी आउटपुट

जब कंप्यूटर हस्ताक्षरित पूर्णांकों को दर्शाने के लिए दो के पूरक का उपयोग करते हैं, तो -5 जैसा मान संग्रहीत किया जाता है बिट पैटर्न "1111 1011।" हालाँकि, fmt.Printf का उपयोग करके इस बाइनरी प्रतिनिधित्व को इस तरह प्रिंट करने का प्रयास करते समय:

var i int8 = -5
fmt.Printf("%b", i)

आउटपुट अप्रत्याशित रूप से "-101" दिखाता है। ऐसा क्यों हो रहा है, और क्या टू के पूरक को आंतरिक रूप से उपयोग किया जा रहा है? एक नकारात्मक हस्ताक्षरित पूर्णांक को स्वरूपित करते समय, यह इसे एक सकारात्मक मान में परिवर्तित करता है और फिर स्वरूपित स्ट्रिंग से पहले '-' चिह्न जोड़ता है।

fmt.Printf के स्रोत कोड को देखने पर, हम पाते हैं कि fmt.integer परिवर्तित हो जाता है एक हस्ताक्षरित पूर्णांक को प्रारूपित करने से पहले एक सकारात्मक मान पर:

नकारात्मक := हस्ताक्षर == हस्ताक्षरित && ए

अहस्ताक्षरित बनाम हस्ताक्षरित आउटपुट

    negative := signedness == signed && a 

var u uint8 = uint(i) fmt.Printf("%b", u)

यहां, हम i को प्रिंट करने से पहले एक अहस्ताक्षरित पूर्णांक में परिवर्तित करते हैं। इस बार, आउटपुट सही ढंग से "11111011" दिखाता है, जो -5 का दो पूरक है। fmt.Printf, हमें पहले इसे एक अहस्ताक्षरित प्रकार का उपयोग करके एक सकारात्मक पूर्णांक में परिवर्तित करना चाहिए। यह सुनिश्चित करता है कि fmt.Printf स्वचालित रूप से मान को नकारात्मक मान में परिवर्तित नहीं करता है और '-' चिह्न नहीं जोड़ता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3