الفرق بين المراجعتين لصفحة: «Algorithms/hexadecimal to octal»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:تحويل الأعداد من النظام السداسي عشر إلى النظام الثماني}}</noinclude> تحوّل هذه الخوا...' |
لا ملخص تعديل |
||
سطر 196: | سطر 196: | ||
} | } | ||
</source> | </source> | ||
== مصادر == | == مصادر == | ||
المراجعة الحالية بتاريخ 18:38، 21 ديسمبر 2019
تحوّل هذه الخوارزمية العدد المعطى من النظام السداسي عشر (الأساس 16) إلى النظام الثماني (الأساس 8).
مثال:
Input: Hexadecimal = 1AC
Output: Binary = 0654
توضيح:
القيمة الثنائية المكافئة للعدد 1: 0001
القيمة الثنائية المكافئة للعدد: 1010
القيمة الثنائية المكافئة للعدد: 1100
تجميع الأعداد الثنائي ثلاث ثلاث: 000 110 101 100
القيمة الثمانية المكافئة للعدد 000: 0
القيمة الثمانية المكافئة للعدد 110: 6
القيمة الثمانية المكافئة للعدد 101: 5
القيمة الثمانية المكافئة للعدد 100: 4
Input: Hexadecimal = 5D1F
Output: Octal = 56437
خطوات الخوارزمية
نظام الأعداد السداسي عشر هو نظام عددي موقعي positional numeral system يكون الجذر أو الأساس فيه هو 16
ويستخدم 16
رمزًا لتمثيل الأعداد.
أما نظام الأعداد الثماني فالجذر أو الأساس فيه هو 8
ويستخدم 8
رموز لتمثيل الأعداد، ويمكن تحويل الأعداد من النظام الثنائي إلى النظام الثنائي بتجميع الأعداد الثنائية في مجموعات متتالية تضمّ كل واحدة منها ثلاثة رموز (بدءًا من اليمين).
تجري عملية تحويل الأعداد من النظام السداسي عشر إلى النظام الثماني باتباع الخطوات التالية:
- إيجاد العدد الثنائي المكافئ لكل رقم في العدد السداسي عشر المعطى. وتُضاف أصفار إلى الجانب الأيسر إن كان أيٌّ من الأعداد الثنائي المكافئة أقصر من 4 بتات.
- تقسيم الأعداد الثنائي إلى مجموعات، تحتوي كل مجموعة منها على 3 بتات أو أعداد ويبدأ التقسيم من اليمين إلى اليسار. تضاف الأصفار إلى الجانب الأيسر إن كانت أي مجموعة تحتوي على أقلّ من 3 بتات.
- إيجاد العدد الثماني المكافئ لكل مجموعة من الأعداد الثنائية.
تنفيذ الخوارزمية
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
- C++:
#include <math.h>
#include <stdio.h>
#include <string.h>
long long int hex_to_bin(char hex[])
{
long long int bin, place;
int i = 0, rem, val;
bin = 0ll;
place = 0ll;
// التحويل من النظام السداسي عشر إلى النظام الثنائي
for (i = 0; hex[i] != '\0'; i++) {
bin = bin * place;
switch (hex[i]) {
case '0':
bin += 0;
break;
case '1':
bin += 1;
break;
case '2':
bin += 10;
break;
case '3':
bin += 11;
break;
case '4':
bin += 100;
break;
case '5':
bin += 101;
break;
case '6':
bin += 110;
break;
case '7':
bin += 111;
break;
case '8':
bin += 1000;
break;
case '9':
bin += 1001;
break;
case 'a':
case 'A':
bin += 1010;
break;
case 'b':
case 'B':
bin += 1011;
break;
case 'c':
case 'C':
bin += 1100;
break;
case 'd':
case 'D':
bin += 1101;
break;
case 'e':
case 'E':
bin += 1110;
break;
case 'f':
case 'F':
bin += 1111;
break;
default:
printf("Invalid hexadecimal input.");
}
place = 10000;
}
return bin;
}
// التحويل من النظام الثنائي إلى النظام الثماني
long long int bin_to_oct(long long bin)
{
long long int octal, place;
int i = 0, rem, val;
octal = 0ll;
place = 0ll;
place = 1;
while (bin > 0) {
rem = bin % 1000;
switch (rem) {
case 0:
val = 0;
break;
case 1:
val = 1;
break;
case 10:
val = 2;
break;
case 11:
val = 3;
break;
case 100:
val = 4;
break;
case 101:
val = 5;
break;
case 110:
val = 6;
break;
case 111:
val = 7;
break;
}
octal = (val * place) + octal;
bin /= 1000;
place *= 10;
}
return octal;
}
// تحول الدالة العدد المعطى من النظام السداسي عشر إلى النظام الثماني
long long int hex_to_oct(char hex[])
{
long long int octal, bin;
// التحويل من النظام السداسي عشر إلى النظام الثنائي
bin = hex_to_bin(hex);
// التحويل من النظام الثنائي إلى النظام الثماني
octal = bin_to_oct(bin);
return octal;
}
// اختبار الدوال السابقة
int main()
{
// العدد المطلوب تحويله من النظام السداسي عشر إلى النظام الثماني
char hex[20] = "1AC";
printf("Equivalent Octal Value = %lld",
hex_to_oct(hex));
return 0;
}
مصادر
- صفحة Program to Convert Hexadecimal to Octal في توثيق الخوارزميات في موقع GeeksforGeeks.