2012-06-01 12 views
6

मैं समझता हूं कि 1 बाइट 0-255 से एक संख्या रखेगा। और यह कि 16-बिट संख्या 0-65535 के बीच है।दो बाइट्स को एक 16-बिट संख्या में कैसे परिवर्तित करें?

यदि मैं दो अलग-अलग 8-बिट रजिस्टरों का उपयोग करके 16-बिट संख्या का प्रतिनिधित्व करने की कोशिश कर रहा हूं ... मैं यह कैसे कर सकता हूं? गणित कैसे काम करता है?

धन्यवाद!

+1

क्या वास्तुकला और असेंबलर? –

+1

कन्वर्ट करने के लिए कुछ भी नहीं है। बस 16 बिट संख्या का प्रतिनिधित्व करने वाली जोड़ी के रूप में रजिस्टरों की जोड़ी का इलाज करना शुरू करें। गणित कैसे काम करता है इस बात पर निर्भर करता है कि आपके प्लेटफ़ॉर्म पर आपके द्वारा कौन से निर्देश उपलब्ध हैं। – harold

+0

कोई सुराग नहीं। मैं एम्बेडेड सिस्टम प्रोग्रामर के साथ काम कर रहा हूं। वह कहता है कि वह सीमित है। वह मुझे एक हेक्स बाइट भेज सकता है। और फिर एक और हेक्स बाइट। और मैं उन्हें 16-बिट संख्या में बदलने में सक्षम होना चाहिए। लेकिन मुझे यकीन नहीं है कि कैसे। –

उत्तर

10

गणित बाहर काम करता है इस प्रकार है:

sixteenBitNumber = (upperByte<<8) | lowerByte; 

सबसे सीपीयू, यहां तक ​​कि कुछ पुराने 8 बिट हैं, इस व्याख्या हार्डवेयर में किया जाता है में:

sixteenBitNumber = 256*upperByte + lowerByte; 
बदलाव और बिटवाइज़ संचालन के साथ

: आप 16-बिट रजिस्टर के हिस्सों में या अलग-अलग 8-बिट रजिस्टरों में बाइट लोड करते हैं जो 16-बिट जोड़ी के रूप में काम कर सकते हैं, और हार्डवेयर डेटा के साथ काम करता है जैसे कि यह एक 16-बिट संख्या था।

1

दशमलव में मैं 7 और 9 कैसे ले सकता हूं और 79 बना सकता हूं? (7 * 10) +9 या 12 और 34 और 1234 बनाते हैं? (12 * 100) +34। कोई अलग 0x12 और 0x34 नहीं और 0x1234 बनाते हैं। (0x12 * 0x100) + 0x34। थोड़ा शिफ्ट करने के लिए बहुत साफ (0x12 < < 8) + 0x34। आप कर सकते हैं या यह भी है (0x12 < < 8) | 0x34।

0

आप उनके साथ मिलकर काम करना चाहते हैं? यह आसान है

मान लें कि आपके पास 2643 है - आधार 10 में। यदि आप इसे हिस्सों में तोड़ते हैं, तो आपके पास 26 और 43 की तरह कुछ होगा, है ना? अच्छी तरह से आप जानते हैं कि यदि आप दो से गुणा करते हैं, तो आपको दाएं से बाएं गुणा करना होगा, और ले जाना होगा। तो ऐसा करें - दाएं तरफ गुणा करें, और यदि ओवरफ्लो है, तो उसे बाईं तरफ जोड़ें और फिर बाईं तरफ गुणा करें।

उदाहरण के लिए:

(37 82) *2  ->  ((37*2) + overflow) + 64  ->  (74 + 1) 64  ->  75 64 

देखें कि कैसे काम करें? विभाजन के लिए चला जाता है - ले जाने की जरूरत है? उच्च बिट से चोरी करो। संख्याओं को जोड़ना या घटाना चाहते हैं? सब के बाद इतना मुश्किल नहीं है!

बाइनरी संख्याएं वैसे ही काम करती हैं।

(01110110 10110011) * 10 = (0)  <-  1110110(1)  <-  01100110 

मूल रूप से आप निचले सिरे गणना, तो ऊपरी छोर की गणना, तो आप अतिप्रवाह लागू होते हैं।

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