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

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

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

مثال:

Input: Hexadecimal = 1AC5
Output: Binary = 0001101011000101
توضيح:
    القيمة الثنائية المكافئة للعدد 1: 0001
    القيمة الثنائية المكافئة للعدد A: 1010
    القيمة الثنائية المكافئة للعدد C: 1100
    القيمة الثنائية المكافئة للعدد 5: 0101

Input: Hexadecimal = 5D1F
Output: Binary = 0101110100011111

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

النظام السداسي عشر هو نظام أعداد موقعي Positional numeral system يكون فيه الجذر أو الأساس هو 16 ويستخدم 16 رمزًا لتمثيل الأرقام، أما النظام الثنائي فالأساس فيه هو 2 ويستخدم رمزين فقط لتمثيل الأرقام هما 0 و 1.

يمكن تحويل العدد المعطى من النظام السداسي عشر إلى النظام الثنائي بإيجاد العدد الثنائي المكافئ لكل رقم في العدد الثماني المعطى ثم دمج النتائج للحصول على العدد الثنائي المطلوب.

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

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

  • C++‎:
#include <bits/stdc++.h> 
using namespace std; 

void HexToBin(string hexdec) 
{ 
	long int i = 0; 

	while (hexdec[i]) { 

		switch (hexdec[i]) { 
		case '0': 
			cout << "0000"; 
			break; 
		case '1': 
			cout << "0001"; 
			break; 
		case '2': 
			cout << "0010"; 
			break; 
		case '3': 
			cout << "0011"; 
			break; 
		case '4': 
			cout << "0100"; 
			break; 
		case '5': 
			cout << "0101"; 
			break; 
		case '6': 
			cout << "0110"; 
			break; 
		case '7': 
			cout << "0111"; 
			break; 
		case '8': 
			cout << "1000"; 
			break; 
		case '9': 
			cout << "1001"; 
			break; 
		case 'A': 
		case 'a': 
			cout << "1010"; 
			break; 
		case 'B': 
		case 'b': 
			cout << "1011"; 
			break; 
		case 'C': 
		case 'c': 
			cout << "1100"; 
			break; 
		case 'D': 
		case 'd': 
			cout << "1101"; 
			break; 
		case 'E': 
		case 'e': 
			cout << "1110"; 
			break; 
		case 'F': 
		case 'f': 
			cout << "1111"; 
			break; 
		default: 
			cout << "\nInvalid hexadecimal digit "
				<< hexdec[i]; 
		} 
		i++; 
	} 
} 

// اختبار الدالة السابقة
int main() 
{ 

	// العدد المراد تحويله من النظام السداسي عشر إلى النظام الثنائي
	char hexdec[100] = "1AC5"; 

	cout << "\nEquivalent Binary value is : "; 
	HexToBin(hexdec); 

	return 0; 
}
  • جافا:
public class Improve { 

	static void HexToBin(char hexdec[]) 
	{ 
		int i = 0; 

		while (hexdec[i] != '\u0000') { 

			switch (hexdec[i]) { 
			case '0': 
				System.out.print("0000"); 
				break; 
			case '1': 
				System.out.print("0001"); 
				break; 
			case '2': 
				System.out.print("0010"); 
				break; 
			case '3': 
				System.out.print("0011"); 
				break; 
			case '4': 
				System.out.print("0100"); 
				break; 
			case '5': 
				System.out.print("0101"); 
				break; 
			case '6': 
				System.out.print("0110"); 
				break; 
			case '7': 
				System.out.print("0111"); 
				break; 
			case '8': 
				System.out.print("1000"); 
				break; 
			case '9': 
				System.out.print("1001"); 
				break; 
			case 'A': 
			case 'a': 
				System.out.print("1010"); 
				break; 
			case 'B': 
			case 'b': 
				System.out.print("1011"); 
				break; 
			case 'C': 
			case 'c': 
				System.out.print("1100"); 
				break; 
			case 'D': 
			case 'd': 
				System.out.print("1101"); 
				break; 
			case 'E': 
			case 'e': 
				System.out.print("1110"); 
				break; 
			case 'F': 
			case 'f': 
				System.out.print("1111"); 
				break; 
			default: 
				System.out.print("\nInvalid hexadecimal digit " + hexdec[i]); 
			} 
			i++; 
		} 
	} 

	// اختبار الدالة السابقة 
	public static void main(String args[]) 
	{ 
		// العدد المراد تحويله من النظام السداسي عشر إلى النظام الثنائي
		String s = "1AC5" ; 
		char hexdec[] = new char[100] ; 
			hexdec = s.toCharArray() ; 

		System.out.print("\nEquivalent Binary value is : "); 
		try{ 
			HexToBin(hexdec); 
		} 
		catch (ArrayIndexOutOfBoundsException e){ 
			System.out.print(""); 
		} 

	} 
}

مصادر