Altifigence Academy

8 / 37 · अवधारणा

द्विपूरक, चिह्न विस्तार और overflow

सूत्रों और प्रतिउदाहरणों से signed बिट व्याख्या और जोड़ के overflow की शर्तें अलग करें।

सर्वोच्च बिट का भार बदलता है

NN-बिट द्विपूरकद्विपूरक निश्चित चौड़ाई के बिटों में चिह्नयुक्त पूर्णांक दर्शाने की विधि। n बिट की सीमा −2^(n−1) से 2^(n−1)−1 तक है। पूर्णांक की व्याख्या इस प्रकार है।

s=−bN−12N−1+∑i=0N−2bi2is=-b_{N-1}2^{N-1}+\sum_{i=0}^{N-2}b_i2^i
−2N−1≤s≤2N−1−1-2^{N-1}\le s\le 2^{N-1}-1

चार-बिट 1010 unsignedunsigned बिट अनुक्रम को गैर-ऋणात्मक पूर्णांक मानने का नियम। n बिट की सीमा 0 से 2^n−1 है और वही बिट signed व्याख्या में अलग मान दे सकते हैं। विस्तार से पढ़ें में 10 और signed में −6 है। यह चिह्न बिट अलग करके बाकी को परिमाण मानने की विधि नहीं है। निश्चित चौड़ाई में बिट उलटकरनिषेध NOT संक्रिया 0 को 1 और 1 को 0 बनाती है। सूत्र के ऊपर की रेखा उसके नीचे के पूरे व्यंजक पर NOT लगाती है। विस्तार से पढ़ें 1 जोड़ने से −x-x मिलता है, लेकिन न्यूनतम −8-8 का धनात्मक +8 उसी चार-बिट signed सीमा में नहीं है।

विस्तार से मान सुरक्षित रहना चाहिए

unsigned विस्तार में आगे 0 भरें, signed विस्तार में पुराना चिह्न बिट दोहराएँ। 1010 को 00001010 करने पर +10, और 11111010 करने पर −6 मिलता है। वही बिट विस्तृत करने पर भी व्याख्या अलग हो तो आवश्यक परिपथ अलग है।

SystemVerilog
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);

यह उदाहरण carry इनपुट के बिना दो संकार्यों का signed जोड़ है। exact में पाँच-बिट योग रखा जाता है, फिर संकुचित परिणाम का चिह्न सही है या नहीं जाँचा जाता है।

प्रारंभिक मान 11111010 है। देखें कि unsigned 250 और signed −6 का बिट अनुक्रम समान है। b7 बदलने पर दोनों व्याख्याओं के मान विपरीत दिशाओं में बदलते हैं।

उन्हीं आठ बिटों का चिह्न कैसे पढ़ें

11111010 → unsigned 250 · signed -6 · hex 0xFA

carry और signed overflow अलग हैं

V=aN−1⊕bN−1‾ (sN−1⊕aN−1)V=\overline{a_{N-1}\oplus b_{N-1}}\,(s_{N-1}\oplus a_{N-1})

समान चिह्न के मान जोड़ने पर परिणाम का चिह्न बदले तो overflow है। चार बिट में 7+37+3 का संग्रहित 1010, −6 दिखता है; −8+(−1)-8+(-1) का 0111, +7 दिखता है। अलग चिह्न की दो संख्याएँ जोड़ने पर इस प्रकार की सीमा-लाँघन नहीं होती।

signed और unsigned मिलाने वाले RTL व्यंजक तुलना और विस्तार के नियम उलझाते हैं। दोनों संकार्यों की चौड़ाई और signedness स्पष्ट करें; न्यूनतम, −1, 0 और अधिकतम को सीमा परीक्षण में शामिल करें।

खुद आज़माएँ

चार-बिट signed में −3+(−4)-3+(-4) और 5+55+5 के संग्रहित बिट तथा overflow निकालें। −8-8 का negate परिणाम भी समझाएँ।

व्याख्या पढ़ें

−7-7 का निरूपण 1001 है और overflow नहीं है। 10 सीमा के बाहर है और 1010 (−6) बनकर संग्रहित होता है, इसलिए overflow है। −8 के बिट उलटकर 1 जोड़ें तो फिर 1000 बचता है, क्योंकि +8 निरूपित नहीं हो सकता। इसे सामान्य निरपेक्ष मान गणना की तरह उपयोग नहीं करें।

आपका चयन इस ब्राउज़र पर लागू होता है। फ़ुटर से कभी भी बदलें।