تحويل الأعداد من النظام السداسي عشر إلى النظام العشري

من موسوعة حسوب
< Algorithms
مراجعة 18:41، 21 ديسمبر 2019 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تحول هذه الخوارزمية العدد المعطى من النظام السداسي عشر (الأساس 16) إلى النظام العشري (الأساس 10).

مثال:

Input : 67
Output : 103

Input : 512
Output : 1298

Input: 123
Output: 291

خطوات الخوارزمية

يستخدم النظام السادس عشري 16 رمزًا لتمثيل الأعداد وهي: ‎{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ,F}‎ وتمثّل الرموز (A, B, C, D, E, F) الأعداد (‎10, 11, 12, 13, 14, 15)

تستخرج الخوارزمية الأرقام من العدد المعطى في النظام السداسي عشر بدءًا من اليمين، وتضرب كلّ رقم مُستخرج بالأساس المقابل لمرتبة ذلك الرقم (قوة العدد 16) وتضيفه إلى متغير يمثّل نتيجة عملية التحويل (ليكن dec_value).

لتحويل العدد 1A من النظام السداسي عشر إلى النظام العشري:

dec_value = 1(16^1) + 10(16^0) = 26

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • C++‎‎:
#include<iostream> 
#include<string.h> 
using namespace std; 

int hexadecimalToDecimal(char hexVal[]) 
{ 
	int len = strlen(hexVal); 
	
	// تهيئة قيمة الأساس لتكون 1
	int base = 1; 
	
	int dec_val = 0; 
	
	// استخراج الحروف كأرقام بدءًا من الحرف الأخير
	for (int i=len-1; i>=0; i--) 
	{ 
	// إن كان الحرف المستخرج يقع ضمن النطاق '0' إلى '9'
    // يجري تحويله إلى العدد الصحيح المقابل ضمن النطاق 0-9
    // وذلك بطرح المقدار ٤٨ من قيمة آسكي
		if (hexVal[i]>='0' && hexVal[i]<='9') 
		{ 
			dec_val += (hexVal[i] - 48)*base; 
				
			// زيادة مقدار الأساس بإضافة القوة
      base = base * 16; 
		} 

		// إن كان الحرف المستخرج يقع ضمن النطاق
    // `A` إلى `F`
    // يجري تحويله إلى العدد الصحيح المقابل ضمن النطاق 10-15
    // وذلك بطرح المقدار 55 من قيمة آسكي
    else if (hexVal[i]>='A' && hexVal[i]<='F') 
		{ 
			dec_val += (hexVal[i] - 55)*base; 
		
			// زيادة مقدار الأساس بإضافة القوة
			base = base*16; 
		} 
	} 
	
	return dec_val; 
} 

// اختبار الدالة السابقة
int main() 
{ 
	char hexNum[] = "1A";	 
	cout << hexadecimalToDecimal(hexNum) << endl; 
	return 0; 
}
  • جافا:
import java.io.*; 

class GFG 
{ 
	static int hexadecimalToDecimal(String hexVal) 
	{ 
		int len = hexVal.length(); 
	
		// تهيئة قيمة الأساس لتكون 1
		int base = 1; 
	
		int dec_val = 0; 
	
		// استخراج الحروف كأرقام بدءًا من الحرف الأخير 
		for (int i=len-1; i>=0; i--) 
		{ 
			// إن كان الحرف المستخرج يقع ضمن النطاق '0' إلى '9'
			// يجري تحويله إلى العدد الصحيح المقابل ضمن النطاق 0-9 
			//  وذلك بطرح المقدار 48 من قيمة آسكي
			if (hexVal.charAt(i) >= '0' && hexVal.charAt(i) <= '9') 
			{ 
				dec_val += (hexVal.charAt(i) - 48)*base; 
				
				// زيادة مقدار الأساس بإضافة القوة 
				base = base * 16; 
			} 

			// إن كان الحرف المستخرج يقع ضمن النطاق
			// 'A' إلى 'F'
			// يجري تحويله إلى العدد الصحيح المقابل ضمن النطاق 10-15
			// وذلك بطرح المقدار 55 من قيمة آسكي
			else if (hexVal.charAt(i) >= 'A' && hexVal.charAt(i) <= 'F') 
			{ 
				dec_val += (hexVal.charAt(i) - 55)*base; 
		
				// زيادة مقدار الأساس بإضافة القوة 
				base = base*16; 
			} 
		} 
		return dec_val; 
	} 
	
	// اختبار التابع السابق
	public static void main (String[] args) 
	{ 
		String hexNum = "1A";	 
		System.out.println(hexadecimalToDecimal(hexNum)); 
	} 
}

مصادر