2009-03-07 19 views
48

मैंने इन्हें सी और सी ++ के संदर्भ में देखा है, लेकिन हस्ताक्षरित और हस्ताक्षरित चर के बीच क्या अंतर है?हस्ताक्षरित और हस्ताक्षरित चर के बीच क्या अंतर है?

+0

मैंने सोचा कि हम डिफ़ॉल्ट रूप से प्रोग्रामिंग में मानते हैं और जब प्रोग्रामिंग से संबंधित नहीं है? –

+0

मैंने ऐसा किया। मुझे प्रोग्रामिंग के तहत कुछ कतारें मिलीं। मुझे आश्चर्य है क्योंकि? – batbrat

+0

प्रश्न सामान्य रूप से प्रोग्रामिंग के एक विशिष्ट पहलू से संबंधित है। – Sam152

उत्तर

102

हस्ताक्षर चर, जैसे हस्ताक्षर किए पूर्णांक आप सकारात्मक और नकारात्मक दोनों पर्वतमाला में संख्याओं का प्रतिनिधित्व करने की अनुमति देगा। ऐसे अहस्ताक्षरित पूर्णांक के रूप में

अहस्ताक्षरित चर,, केवल आप सकारात्मक में संख्याओं का प्रतिनिधित्व करने की अनुमति देगा। एक ही प्रकार के

अहस्ताक्षरित और हस्ताक्षर किए चर (जैसे int और byte के रूप में) दोनों एक ही रेंज (65,536 और 256 नंबर की सीमा, क्रमशः) है, लेकिन अहस्ताक्षरित चर पर हस्ताक्षर किए वाली संबंधित तुलना में एक बड़ा परिमाण संख्या का प्रतिनिधित्व कर सकते

उदाहरण के लिए, एक unsigned byte मूल्यों 0 से 255 करने के लिए, का प्रतिनिधित्व करते हुए signed byte127 को -128 प्रतिनिधित्व कर सकते हैं कर सकते हैं।

Signed number representations पर विकिपीडिया पृष्ठ बिट स्तर पर प्रतिनिधित्व में अंतर बताता है, और Integer (computer science) पृष्ठ प्रत्येक हस्ताक्षरित/हस्ताक्षरित पूर्णांक प्रकार के लिए श्रेणियों की एक तालिका प्रदान करता है।

+0

सकारात्मक संख्या शून्य से अधिक है। हस्ताक्षर संख्या, कम से कम सी में, एक पूरक प्रतिनिधित्व के बजाय एक साइन बिट का उपयोग कर सकते हैं, इसलिए दोहराए गए +/- शून्य के कारण हस्ताक्षरित के समान सीमा नहीं है। यदि आप कहते हैं कि int int 16 बिट है, तो प्लेटफ़ॉर्म कहें; अधिकांश आधुनिक सिस्टम 32 या 64 बिट हैं। –

18

साइन किए गए वेरिएबल ध्वजांकित करने के लिए एक बिट का उपयोग करते हैं चाहे वे सकारात्मक या नकारात्मक हों। असाइन किए गए चर के पास यह बिट नहीं है, इसलिए वे एक ही स्थान पर बड़ी संख्या में स्टोर कर सकते हैं, लेकिन केवल nonnegative संख्याएं, उदा। 0 और उच्चतम।

अधिक जानकारी के लिए: Unsigned and Signed Integers

+0

एस/पॉजिटिव/nonnegative/ – Ken

+0

यूप, और अधिक स्पष्ट करने के लिए तय किया गया। –

+0

धन्यवाद, Google खोज के 2 मिनट के बाद, यह मेरे पसंदीदा उत्तर था – SheldonH

3

बिना हस्ताक्षर किए गए चर केवल सकारात्मक संख्या हो सकते हैं, क्योंकि उनमें यह इंगित करने की क्षमता नहीं है कि वे नकारात्मक हैं।

इस क्षमता को 'साइन' या 'साइनिंग बिट' कहा जाता है।

एक दुष्प्रभाव यह है कि बिना हस्ताक्षर किए बिट के, उनके पास एक और बिट है जिसका उपयोग संख्या का प्रतिनिधित्व करने के लिए किया जा सकता है, जो अधिकतम संख्या को प्रदर्शित कर सकता है।

3

हस्ताक्षर चर 0, सकारात्मक या नकारात्मक हो सकता है।

बिना हस्ताक्षर किए गए चर 0 या सकारात्मक हो सकते हैं।

असाइन किए गए चर का उपयोग कभी-कभी किया जाता है क्योंकि वास्तविक बिट का प्रतिनिधित्व करने के लिए अधिक बिट्स का उपयोग किया जा सकता है। आपको एक बड़ी रेंज दे रही है। साथ ही आप यह सुनिश्चित कर सकते हैं कि उदाहरण के लिए आपके फ़ंक्शन पर नकारात्मक मान नहीं दिया जाएगा।

0

अहस्ताक्षरित चर चर जो आंतरिक रूप से एक गणितीय चिह्न (प्लस या माइनस) 'शून्य' स्टोर कर सकते हैं या सकारात्मक मूल्यों केवल बिना प्रतिनिधित्व कर रहे हैं कर रहे हैं। आइए मान लें कि हस्ताक्षरित चर एन बिट्स आकार में है, तो यह 2^एन (2 पावर एन) मानों - 0 (2^एन -1) का प्रतिनिधित्व कर सकता है। दूसरी तरफ एक हस्ताक्षरित चर, संकेत का प्रतिनिधित्व करने के लिए 'एक' खो देता है, इसलिए यह शून्य सहित (2^(एन -1) -1) (2^(एन -1)) के मूल्यों को स्टोर कर सकता है।इस प्रकार, हस्ताक्षरित चरसकारात्मक मान, नकारात्मक मान और शून्य स्टोर कर सकता है।

पुनश्च:
आंतरिक रूप से, गणितीय संकेत, किसी के पूरक के रूप में प्रस्तुत किया जा सकता दो के पूरक फार्म या एक संकेत बिट के साथ (जैसे: 0 -> +, 1-> -)
सभी इन तरीकों को प्रभावी ढंग से एन बिट्स (2^एन) में तीन भागों, सकारात्मक, नकारात्मक और शून्य में प्रतिनिधित्व योग्य मानों की सीमा को विभाजित करें।

यह सिर्फ मेरे दो सेंट मूल्य है।

मुझे उम्मीद है कि इससे मदद मिलती है।

2

अहस्ताक्षरित प्रयोग किया जाता है जब उर मूल्य सकारात्मक होना चाहिए, कोई नकारात्मक मूल्य यहाँ, अगर यदि अहस्ताक्षरित int श्रृंखला के लिए 32,767 को पूर्णांक रेंज -32,768 के लिए हस्ताक्षर किए 0 65535

37

को आमतौर पर करने के लिए एक के रूप में संदर्भित करते हुए ' साइन बिट ', आमतौर पर उपयोग किए जाने वाले द्विआधारी मूल्यों में सही साइन बिट नहीं होता है।

अधिकांश कंप्यूटर दो के पूरक अंकगणित का उपयोग करते हैं।ऋणात्मक संख्याओं को one's-पूरक (सभी बिट्स फ्लिप) ले रहे हैं और एक जोड़कर बनाया जाता है:

            5 (decimal) -> 00000101 (binary)
            1's complement: 11111010
            add 1: 11111011 which is 'FB' in hex


यही कारण है कि एक हस्ताक्षरित बाइट -128 से 127 के बजाय -127 को 127 करने के लिए मान रखती है:

            1 0 0 0 0 0 0 0 = -128
            1 0 0 0 0 0 0 1 = -127
                    - - -
            1 1 1 1 1 1 1 0 = -2
            1 1 1 1 1 1 1 1 = -1
            0 0 0 0 0 0 0 0 = 0
            0 0 0 0 0 0 0 1 = 1
            0 0 0 0 0 0 1 0 = 2
                    - - -
            0 1 1 1 1 1 1 0 = 126
            0 1 1 1 1 1 1 1 = 127
            (जोड़ने 127 करने के लिए 1 देता है :)
            1 0 0 0 0 0 0 0       जो हम इस चार्ट के शीर्ष पर देखना -128 है।


यदि हमारे पास उचित साइन बिट था, तो मूल्य सीमा समान होगी (उदा। -127 से +127) क्योंकि एक बिट साइन के लिए आरक्षित है। सबसे महत्वपूर्ण बिट संकेत सा है, तो हम चाहते हैं:

            5 (decimal) -> 00000101 (binary)
            -5 (decimal) -> 10000101 (binary)

इस मामले में दिलचस्प बात यह है हमारे पास है शून्य और ऋणात्मक शून्य दोनों:
            0 (decimal) -> 00000000 (binary)
            -0 (decimal) -> 10000000 (binary)


हम की जरूरत नहीं है -0 two's-पूरक के साथ; क्या होगा -08 -128 (या अधिक सामान्य होने के लिए, सबसे बड़ा सकारात्मक मूल्य से अधिक)। हम हालांकि किसी के पूरक के साथ करते हैं; सभी 1 बिट नकारात्मक हैं 0.

गणितीय, -0 बराबर 0. मुझे अस्पष्ट रूप से एक कंप्यूटर याद है जहां -0 < 0, लेकिन मुझे अब इसका कोई संदर्भ नहीं मिल रहा है।

+3

बहुत बहुत धन्यवाद! मैं वास्तव में उलझन में था कि यह हस्ताक्षर किए गए बाइट के लिए -128 से 127 क्यों है और 127 से 127 तक नहीं। इस उत्तर को वोटों की आवश्यकता है! –

-1

यह सटीक परिभाषा नहीं हो सकती है लेकिन मैं आपको एक उदाहरण दूंगा: यदि आप सिस्टम समय से इसे यादृच्छिक संख्या बनाना चाहते हैं, तो यहां हस्ताक्षर किए गए चर का उपयोग करना फायदेमंद है क्योंकि यादृच्छिक रूप से बड़े दायरे हैं हस्ताक्षरित संख्याओं के रूप में संख्या सकारात्मक और नकारात्मक दोनों संख्या देते हैं। चूंकि सिस्टम समय नकारात्मक नहीं हो सकता है, इसलिए हम हस्ताक्षरित चर (केवल सकारात्मक संख्या) का उपयोग करते हैं और हमारे पास यादृच्छिक संख्याओं की विस्तृत श्रृंखला है।

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