2009-11-12 4 views
5

मैं कंप्यूटर वास्तुकला के लिए मेरे HW पर काम कर रहा हूँ और मैं निम्नलिखित समस्या में आए:क्या यह मेरी कंप्यूटर आर्किटेक्चर पुस्तक में एक गलती है?

एक = 247
बी = 237

1) मान लें कि एक और बी प्रवेश किया हुआ है 8 बिट पूर्णांकों दो के पूरक प्रारूप में संग्रहीत। संतृप्त अंकगणित का उपयोग कर ए + बी की गणना करें। परिणाम दशमलव में लिखा जाना चाहिए। अपना काम दिखाओ।
2) मान लें कि ए और बी को दो कॉम्पैलेन्ट प्रारूप में संग्रहीत 8 बिट पूर्णांक पर हस्ताक्षर किए गए हैं। संतृप्त अंकगणित का उपयोग कर ए - बी की गणना करें।

अब, ये एक वैध प्रश्न कैसे हैं? मुझे पता है कि संतृप्त गणित क्या है, लेकिन यह कहने के लिए मान्य है कि ए 247 है और बी 237 है जब उन्हें 8-बिट दो पूरक संख्या द्वारा प्रदर्शित नहीं किया जा सकता है?

मुझे एहसास है कि संतृप्त अंकगणित का बिंदु अत्यधिक बिट्स पर सभी बिट्स सेट करने के लिए ओवरफ्लो/अंडरफ्लो के मामले में है, लेकिन मुझे प्रश्नों की एक श्रृंखला पूछने के लिए यह समझ में नहीं आता है (3 और हैं यह वही समस्या) संख्याओं के अंकगणित को शामिल करती है जिसे वे निर्दिष्ट प्रारूप में प्रदर्शित नहीं किया जा सकता है।

क्या मैं यहाँ गलत हूँ?

+18

@Petpetualcoder, यदि आपके पास कुछ भी जोड़ने के लिए कुछ भी नहीं है तो टिप्पणी क्यों परेशानी है? यह उस दिन से बाहर है जब मैं अपने प्रोफेसर से संपर्क कर सकता हूं और मैं अपना होमवर्क ~ अब ~ कर रहा हूं। अगर यह एक समस्या थी तो मैं इसे छोड़ दूंगा लेकिन बहुत से लोग देखकर, मैंने एसओ से पूछने का फैसला किया कि क्या मुझे कुछ याद आ रहा है। – Teradice

उत्तर

8

एकमात्र व्याख्या जो समझ में आता है वह यह है कि दिए गए मान हस्ताक्षर किए गए प्रश्न में संख्या की व्याख्या हैं; 127 से अधिक मान स्पष्ट रूप से 8-बिट हस्ताक्षरित जुड़वां-पूरक मान के लिए सीमा से बाहर हैं। मैं मानता हूं कि सवाल खराब है, हालांकि।

+0

हाँ यह एकमात्र दृष्टिकोण है जो मुझे समझ में आता है। – Nosredna

1

मुझे गलत लगता है। 8-बिट हस्ताक्षरित दो के पूरक पूर्णांक -128 और 127 के बीच हो सकते हैं। 8-बिट हस्ताक्षरित दो के पूरक चर के लिए लगातार 237 या 247 असाइन करने का कोई भी प्रयास आपकी भाषा के आधार पर एक त्रुटि होनी चाहिए।

+0

यह सी में त्रुटि के बिना काम करता है। साथ ही यह होना चाहिए - अगर ओवरफ्लो होता है तो केवल एक त्रुटि होनी चाहिए, जो यहां नहीं है। "237" का अनुवाद केवल इसके बिट-प्रस्तुति में किया गया है, जो 8 बिट्स में फिट बैठता है। उस के बीच कोई अंतर नहीं है और बाइट को 0xED – poundifdef

+0

@rasher को असाइन करना: मानक इसके बारे में असहमत होगा। हस्ताक्षर किए गए मूल्य पर असंगत रूपांतरित करना जहां यह अंतर्निहित प्रकार में फिट नहीं है परिणामस्वरूप निर्दिष्ट कार्यान्वयन है। लेकिन यह एक वास्तुकला प्रश्न है। सी क्या करेगा पर सवाल नहीं है। –

3

मुझे पता नहीं है, लेकिन यह पूछ सकते हैं: "। एक 8 बिट पूर्णांक तक दशमलव संख्या 237 कन्वर्ट अब एक 8 बिट 2 के पूरक पूर्णांक के रूप में उन बिट्स की व्याख्या और उन्हें जोड़ने"।

char a = 237; 
printf("%x %d\n",a, a); 

कौन सा संकलित करता है तथा आप मान 8 बिट मूल्य "237"

0

समस्या तो 2 के पूरक व्याख्या के आधार पर उम्मीद करेंगे देता है:

किंडा कहा, सी में की तरह "मान लें कि ए और बी 8 बिट हस्ताक्षरित पूर्णांक में संग्रहीत हैं", तो यह समझ में आएगा। एक हस्ताक्षरित 8 बिट पूर्णांक में ए = 247 भंडारण -9 का मूल्य उत्पन्न करता है, बी = 237 भंडारण -19 का मूल्य उत्पन्न करता है। अन्यथा, यह समझ में नहीं आता है। एक हस्ताक्षरित 8 बिट पूर्णांक का मूल्य 247 या 237 का मूल्य नहीं हो सकता है।