नकारात्मक हस्ताक्षरित मूल्य कैसे संग्रहीत किए जाते हैं?


13

मैं इस वीडियो को साइन किए गए पूर्णांकों के अधिकतम और न्यूनतम मूल्यों पर देख रहा था ।

एक सकारात्मक हस्ताक्षरित मूल्य का एक उदाहरण लें - 0000 0001 पहला बिट यह दर्शाता है कि संख्या सकारात्मक है और अंतिम 7 बिट्स संख्या स्वयं हैं। तो यह आसानी से +1 के रूप में व्याख्या की जाती है।

अब एक नकारात्मक हस्ताक्षरित मूल्य का एक उदाहरण लेते हैं - 1000 0000 जो -8 से बाहर आता है। ठीक है, कंप्यूटर समझ सकता है कि यह पहले के कारण नकारात्मक मूल्य है लेकिन यह कैसे समझ में आता है कि 000 0000 का मतलब है -8?

सामान्य तौर पर, कंप्यूटर में नकारात्मक हस्ताक्षरित मूल्य कैसे संग्रहीत / व्याख्या किए जाते हैं?


nl.wikipedia.org/wiki/Two%27s_complement बाइनरी नंबर कंप्यूटर में कैसे संग्रहीत किया जाता है।
पीटर बी

@PieterB शायद आपका कंप्यूटर। और बहुत सारे अन्य लोग। अच्छे कारणों के लिए! लेकिन इसका मतलब यह नहीं है कि यह एकमात्र तरीका है।
अंडरस्कोर_ड

किसी भी तरह से आप की तरह। मैं कम से कम 256 के बारे में सोच सकता हूँ! संगणक पर बाइनरी संख्या (8 बिट) के भंडारण के तरीके। हालांकि उनमें से ज्यादातर अविश्वसनीय रूप से मूर्ख हैं।
केलथ

सी निर्दिष्ट नहीं करता है, यह काफी हद तक है कि चिप निर्माता डेटा का प्रतिनिधित्व करने का निर्णय कैसे लेता है। C मशीन कोड के लिए संकलित हो जाता है, और यह ध्यान रखता है कि चिप स्टोर नंबरों को कैसे फिर से परिभाषित करे। फ़्लोटिंग पॉइंट संख्याओं पर समान नियम लागू होते हैं। यह चिप निर्माता पर निर्भर है कि वे कैसे संग्रहीत हैं। अधिकांश चिप निर्माता 2 के पूरक का उपयोग करते हैं, लेकिन मुझे यकीन है कि अपवाद हैं।
बेरिन लोरिट्श

जवाबों:


29

सी मानक नकारात्मक हस्ताक्षरित संख्याओं का प्रतिनिधित्व करने के किसी विशेष तरीके को अनिवार्य नहीं करता है।

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

एन-बिट संख्या के दो के पूरक के xरूप में परिभाषित किया गया है 2^N - x। उदाहरण के लिए, 8 बिट के दो के पूरक 1है 2^8 - 1, या 1111 1111। 8-बिट 8का दो का पूरक है 2^8 - 8, जो बाइनरी में है 1111 1000। यह भी के बिट्स flipping xऔर एक जोड़कर गणना की जा सकती है । उदाहरण के लिए:

 1      = 0000 0001
~1      = 1111 1110
~1 + 1  = 1111 1111
-1      = 1111 1111

 21     = 0001 0101
~21     = 1110 1010
~21 + 1 = 1110 1011
-21     = 1110 1011

N- बिट संख्या x के पूरक को मूल रूप से उसके सभी बिट्स फ़्लिप के साथ x के रूप में परिभाषित किया गया है।

 1      = 0000 0001
-1      = 1111 1110

 21     = 0001 0101
-21     = 1110 1010

किसी के पूरक पर दो के पूरक के कई फायदे हैं। उदाहरण के लिए, इसमें 'नकारात्मक शून्य' की अवधारणा नहीं है, जो अच्छे कारण के लिए कई लोगों को भ्रमित कर रहा है। जोड़, गुणा और घटाव हस्ताक्षरित पूर्णांक दो के पूरक के साथ कार्यान्वित के साथ ही काम करता है, जैसा कि वे अहस्ताक्षरित पूर्णांक के साथ भी करते हैं।


19

बाइनरी में नकारात्मक मूल्यों का प्रतिनिधित्व करने के लिए तीन अच्छी तरह से ज्ञात तरीके हैं:

  1. हस्ताक्षरित परिमाण । यह समझना सबसे आसान है, क्योंकि यह उसी तरह काम करता है जब हम नकारात्मक दशमलव मानों के साथ काम करते समय उपयोग किया जाता है: पहली स्थिति (बिट) संकेत का प्रतिनिधित्व करती है (सकारात्मक के लिए 0, नकारात्मक के लिए 1), और दूसरे बिट संख्या का प्रतिनिधित्व करते हैं। । यद्यपि यह समझना हमारे लिए आसान है, लेकिन कंप्यूटर के साथ काम करना कठिन है, खासकर जब ऋणात्मक संख्याओं के साथ अंकगणित करना।
    8-बिट हस्ताक्षरित परिमाण में, मान 8 को 0 0001000 और -8 को 1 0001000 के रूप में दर्शाया गया है।

  2. एक का पूरक । इस प्रतिनिधित्व में, सभी बिट्स को फ़्लिप करके और केवल साइन बिट नहीं, इसी सकारात्मक संख्या से नकारात्मक संख्याएं बनाई जाती हैं। इससे कंप्यूटर के लिए ऋणात्मक संख्याओं के साथ काम करना आसान हो जाता है, लेकिन यह जटिलता है कि +0 और -0 के लिए दो अलग-अलग प्रतिनिधित्व हैं। सभी बिट्स के फ़्लिपिंग को मनुष्यों के लिए समझना कठिन हो जाता है।
    8-बिट के पूरक में, मान 8 को 00001000 और -11 को 11110111 के रूप में दर्शाया गया है।

  3. दो का पूरक । यह आजकल सबसे आम प्रतिनिधित्व है जिसका उपयोग नकारात्मक पूर्णांक के लिए किया जाता है क्योंकि यह कंप्यूटर के लिए काम करना सबसे आसान है, लेकिन यह मनुष्यों के लिए समझना भी सबसे कठिन है। किसी के पूरक और दो के पूरक के बीच नकारात्मक मूल्यों के लिए उपयोग किए जाने वाले बिट पैटर्न की तुलना करते समय, यह देखा जा सकता है कि दो के पूरक में एक ही बिट पैटर्न अगले निचले नंबर के लिए एन्कोड करता है। उदाहरण के लिए 11111111 किसी के पूरक में -0 और दो के पूरक में -1 के लिए है, और इसी तरह 10000000 (-127 बनाम -128) के लिए है।
    8-बिट दो के पूरक में, मान 8 को 00001000 और -11 को 11111000 के रूप में दर्शाया गया है।


8
हस्ताक्षरित परिमाण में दो शून्य भी होते हैं।
जोर्ग डब्ल्यू मित्तग

संकेत / परिमाण का उल्लेख करने के लिए +1। असामान्य और असुविधाजनक (सीपीयू के लिए यदि मनुष्य नहीं!), लेकिन जानने योग्य है।
अंडरस्कोर_ड

लगभग हम सभी हस्ताक्षरित परिमाण के साथ काम करते हैं, विशेष रूप से एफपी संख्या के साथ।
पॉलो ०२०५

2

हस्ताक्षर किए गए पूर्णांक http://en.wikipedia.org/wiki/Two%27s%20complement का उपयोग करके संग्रहीत किए जाते हैं

फिर आप प्राप्त करें:

000   0
001   1
010   2
011   3
100   -4
101   -3
110   -2
111   -1

मूल रूप से यह बहुत आसान गणना है, आप हस्ताक्षर किए गए पूर्णांक के आधे तक गिनते हैं। एक +1 करें, इसे नकारात्मक बनाएं और नीचे गिनना शुरू करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.