تحويل الأعداد من النظام السداسي عشر إلى النظام العشري
تحول هذه الخوارزمية العدد المعطى من النظام السداسي عشر (الأساس 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));
}
}
مصادر
- صفحة Program from hexadecimal to Decimal في توثيق الخوارزميات في موقع GeeksforGeeks.