2012-11-25 12 views
14

signed सी में क्या मतलब है? मैं इस तालिका दिखाने के लिए:हस्ताक्षरित और हस्ताक्षरित मानों का क्या अर्थ है?

enter image description here

यह कहते +127 को signed char128128 भी एक सकारात्मक पूर्णांक है, तो यह +128 से +127 पर कुछ कैसे हो सकता है? या 128 और +127 के अलग-अलग अर्थ हैं? मैं Apress Beginning C पुस्तक का जिक्र कर रहा हूं।

+2

तालिका में बस शून्य चिह्न हैं। मूल्यों की प्रत्येक सीमा में पहले नंबर से पहले एक ऋण चिह्न होना चाहिए। –

+1

सभी को धन्यवाद, यहां सभी को +1, मुझे यकीन था कि –

उत्तर

26

एक हस्ताक्षरित पूर्णांक नकारात्मक संख्याओं का प्रतिनिधित्व कर सकता है; हस्ताक्षर नहीं कर सकते हैं।

हस्ताक्षरित पूर्णांकों में अपरिवर्तित व्यवहार होता है यदि वे अतिप्रवाह होते हैं, जबकि बिना हस्ताक्षर किए गए पूर्णांक मॉड्यूलो का उपयोग करके लपेटते हैं।

ध्यान दें कि वह तालिका गलत है। सबसे पहले, इसमें - संकेत गुम हैं (जैसे -128 से +127)। दूसरा, मानक गारंटी नहीं देता है कि उन 0 श्रेणियों के भीतर होना चाहिए।

+0

अतिरिक्त जानकारी के लिए धन्यवाद;) –

4

तालिका में माइनस गुम है। हस्ताक्षरित चार की सीमा -128 से +127 है; इसी तरह टेबल पर अन्य प्रकार के लिए।

+0

पुस्तक में कुछ गड़बड़ है, जहां मैं उलझन में आया, यह अप्रेस बुक है –

1

आमतौर पर हस्ताक्षर किए जाने का मतलब है कि संख्या के सामने + या - प्रतीक है। इसका मतलब है कि हस्ताक्षरित int, हस्ताक्षरित शॉर्ट्स, आदि नकारात्मक नहीं हो सकता है।

+0

का जिक्र है क्या एक हस्ताक्षरित डबल/फ्लोट है? –

+0

वैसे यह उससे थोड़ा अधिक जुड़ा हुआ है। एक बात के लिए, एक हस्ताक्षरित डबल/फ्लोट जैसी कोई चीज नहीं है। –

2

हस्ताक्षरित संख्या वे हैं जिनके पास + या - उनके साथ संलग्न है। E.g +2 और -6 हस्ताक्षरित संख्याएं हैं। हस्ताक्षरित संख्या सकारात्मक और नकारात्मक दोनों संख्याओं को स्टोर कर सकती है, इसलिए उनके पास बड़ी सीमा क्यों है। i.e -32768 से 32767

बिना हस्ताक्षर किए गए नंबर केवल उनके साथ कोई संकेत नहीं हैं। वे हमेशा सकारात्मक होते हैं। और अपनी सीमा 0 से 65535

है आशा है कि यह मदद करता है

+2

'हस्ताक्षर किए गए नंबर सकारात्मक और नकारात्मक दोनों संख्याओं को स्टोर कर सकते हैं, जिनके कारण उनकी बड़ी सीमा है। i.e -32768 से 32767' नहीं, उनके पास एक बड़ी सीमा नहीं है। उनके पास _different_ रेंज है। यही कारण है कि आपका हस्ताक्षरित छोटा 65535 तक सभी तरह से चला जाता है। –

0

एक हस्ताक्षरित पूर्णांक दोनों नकारात्मक और सकारात्मक मान हो सकते हैं। जबकि एक हस्ताक्षरित पूर्णांक केवल सकारात्मक मान हो सकता है।

two's complement है, जो सबसे अधिक इस्तेमाल किया जाता है का उपयोग करके हस्ताक्षरित पूर्णांक के लिए, श्रेणी (पूर्णांक के बिट चौड़ाई के आधार पर) है:

char s -> range -128-127

जहां एक अहस्ताक्षरित चार श्रृंखला है:

unsigned char s -> range 0-255

0

सबसे पहले, आपकी तालिका गलत है ... नकारात्मक संख्याएं गायब हैं। प्रकार चार को प्रतिबिंबित करना .... आप सभी 256 संभावनाओं पर प्रतिनिधित्व कर सकते हैं क्योंकि चार में एक बाइट का अर्थ है^^ 8। तो अब आपके पास रेंज सेट करने के लिए दो विकल्प हैं। या तो -128 से +128 या 0 से 255 तक। पहला वाला हस्ताक्षरित char दूसरा हस्ताक्षरित चार पर हस्ताक्षर किया गया है। यदि आप पूर्णांक का उपयोग करते हैं तो जागरूक रहें कि आप किस प्रकार की ऑपरेशन सिस्टम का उपयोग कर रहे हैं। 16 बिट, 32 बिट या 64 बिट। Int (16 बिट, 32 बिट, 64 बिट)। चार हमेशा 8 बिट मूल्य है।

6

डिफ़ॉल्ट रूप से, सी में संख्यात्मक मान हस्ताक्षरित हैं, जिसका अर्थ है कि वे नकारात्मक और सकारात्मक दोनों हो सकते हैं। दूसरी तरफ बिना हस्ताक्षर किए गए मान, नकारात्मक संख्याओं की अनुमति न दें।

क्योंकि यह सब स्मृति के बारे में है, अंत में सभी संख्यात्मक मान बाइनरी में संग्रहीत होते हैं। एक 32 बिट हस्ताक्षरित पूर्णांक में सभी बाइनरी 0 से सभी बाइनरी 1s के मान हो सकते हैं। जब 32 बिट हस्ताक्षरित पूर्णांक की बात आती है, तो इसका मतलब है कि इसकी बिट्स (सबसे महत्वपूर्ण) एक ध्वज है, जो मान को सकारात्मक या नकारात्मक मानता है। तो, यह व्याख्या मुद्दा है, जो बताता है कि मूल्य पर हस्ताक्षर किए गए हैं।

सकारात्मक हस्ताक्षरित मानों को हस्ताक्षरित मानों के समान ही संग्रहीत किया जाता है, लेकिन नकारात्मक संख्या दो पूरक विधि का उपयोग करके संग्रहीत की जाती है।

यदि आप बाइनरी में नकारात्मक मान लिखना चाहते हैं, तो पहले सकारात्मक संख्या लिखें, अगले बिट्स को घुमाएं और आखिरी जोड़ें 1. जब में नकारात्मक मान दो पूरक समान परिमाण की सकारात्मक संख्या में जोड़ा जाता है, तो परिणाम 0.

उदाहरण में हो जाएगा नीचे 8 बिट संख्या के साथ सौदा करने देता है, क्योंकि यह निरीक्षण करने के लिए सरल हो जाएगा:

positive 95: 01011111 
negative 95: 10100000 + 1 = 10100001 [positive 161] 
      0: 01011111 + 10100001 = 100000000 
            ^
            |_______ as we're dealing with 8bit numbers, 
              the 8 bits which means results in 0 
1

यह पुस्तक लिखने में कोई गलती थी; हस्ताक्षर किए गए चार -128 से 127 तक जाते हैं।

हस्ताक्षर किए गए पूर्णांक two's complement प्रतिनिधित्व का उपयोग करके संग्रहीत किए जाते हैं, जिसमें पहली बिट को संकेत इंगित करने के लिए उपयोग किया जाता है।

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

  • सबसे बड़ा सकारात्मक 7 बिट संख्या (01,111,111) ख = 2^7 - 1 = 127.
  • छोटी से छोटी नकारात्मक 7 बिट संख्या (11111111) ख = -128
    (क्योंकि 11111111 है दो के पूरक 10000000 = 2^7 = 128)।

बिना हस्ताक्षर किए गए वर्णों में संकेत नहीं हैं ताकि वे सभी 8 बिट्स का उपयोग कर सकें। (00000000) से बी = 0 से (11111111) बी = 255.

0

सभी पूर्णांक डेटा प्रकार डेटा प्रकारों पर हस्ताक्षर किए जाते हैं, यानी उनके पास मूल्य हैं जो सकारात्मक या नकारात्मक हो सकते हैं। बिना हस्ताक्षर संख्या हमेशा गैर-ऋणात्मक संख्या होती है।

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