ما هي الأنظمة المختلفة للأرقام في عالم البرمجة

السلام عليكم ورحمة الله وبركاته

وقت القراءة: ≈ 15 دقيقة

المقدمة

نحن البشر نعتمد على النظام العشري في حياتنا اليومية وهي الأرقام المحصورة بين 0 و 9
أما في عالم البرمجة فهناك أنظمة أخرى للأرقام تعتمد على الأرقام المحدودة والتي تختلف من نظام لآخر

مثل النظام الثنائي وهو الذي يعتمد على الرقمين 0 و 1 فقط
وهذا هو النظام الذي يستخدمه الجهاز ويفهمها
لأن الجهاز لا شيء سوى دوائر كهربائية تعمل بالتيار الكهربائي والتيار الكهربائي يمر أو لا يمر
لذا بناءً على هذا الأمر تم تطوير النظام الثنائي ليكون اللغة التي يفهمها الجهاز
بحيث أن الرقم 0 يعني أن التيار لن يمر والرقم 1 يعني أن التيار سيمر

وخذا هو الأساس لكل شيء في عالم الحاسوب والبرمجة
واستطعنا تمثيل الأرقام الصحيحة أو العشري بهذا النظام والعكس
فالرقم 2 في النظام الصحيح يكون 0010 في النظام الثنائي والرقم 5 يكون 0101 وهكذا

والجهاز عندما يرى 0101 يفهم أن هناك تيار كهربائي سيمر في الدائرة الأولى والثالثة فقط والباقي لن يمر فيها
وهكذا قلنا للجهاز أنك عندما ترى هذا النمط من الأرقام 0101 فهذا يعني الرقم 5

الآن نحن كبشر كيف نعرف أن الرقم 0101 يعني الرقم 5 ؟

كيف نحن نفهم الأرقام العشرية ؟

قبل أن نجيب على هذا السؤال يجب أن نفهم كيف نحن البشر نتعامل مع الأرقام الصحيحة أو العشرية
بمعنى أننا نفهم فقط الأرقام التالية 0 و 1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9

نحن فقط نعرف الأرقام التي تتكون من الأرقام السابقة والتي تكون مزيج منها
مثل أن 24 هو مزيج من الرقم 2 و 4 وأن 495 هو مزيج من الرقم 4 و 9 و 5

ونحن عندما نرى رقمًا مثل 24 نحن نقول أن هذا الرقم يتكون من 4في خانة الآحاد و 2 في خانة العشرات
و 495 تعنى 5 في خانة الآحاد و 9 في خانة المئات و 4 في خانة العشرات

وهكذا نحن نعرف كيف نقرأ الأرقام الصحيحة ونعرف كيف نفهمها
ولتبسيط الأمر يمكنك تخيل الأمر كجدول

العدد الآحاد العشرات المئات الآلاف
24 4 2 0 0
495 5 9 4 0
1687 7 8 6 1

هنا في حيلة وهي أن خانة الآحاد تعني أن الرقم الموضوع فيه يضرب في 10 أس 0
وخانة العشرات تعني أن الرقم الموضوع فيه يضرب في 10 أس 1
وخانة المئات تعني أن الرقم الموضوع فيه يضرب في 10 أس 2

بمعنى أن رقم 24 لديه 4 في خانة الآحاد و 2 في خانة العشرات
اضرب 4 في 10 أس 0 ستحصل على 4 * 1 = 4
واضرب 2 في 10 أس 1 ستحصل على 2 * 10 = 20
اجمع الناتجين 4 + 20 = 24 ستحصل على الرقم الصحيح 24

نفس الشيء مع الرقم 495

اجمع النواتج 5 + 90 + 400 = 495 ستحصل على الرقم الصحيح 495

نفس الشيء مع الرقم 1687

اجمع النواتج 7 + 80 + 600 + 1000 = 1687 ستحصل على الرقم الصحيح 1687

هكذا نحن البشر نفهم ونمثل الأرقام الصحيحة ونعرف كيف نقرأها
الآن نسأل سؤال جديد كيف نفهم الأرقام الثنائية ؟

تحويل الأرقام الثنائية إلى صحيحة

هذه الطريقة تساعدنا على ترجمة الأرقام الثنائية إلى أرقام صحيحة والعكس
فمثلًا الرقم الثنائي 0101 يمثل الرقم الصحيح 5 كيف عرفنا ذلك؟

لنقم بتحليل الرقم الثنائي 0101
تخيله مثل ما تخيلنا الرقم الصحيح 24
الرقم 24 كان يتكون من 4 في خانة الآحاد و 2 في خانة العشرات
هنا مع الرقم الثنائي 0101 نفهمه بنفس الطريقة فهو يتكون من 1 في خانة الآحاد و 0 في خانة العشرات و 1 في خانة المئات و 0 في خانة الآلاف

الرقم الثنائي الآحاد العشرات المئات الآلاف
0101 1 0 1 0

لكن في النظام الثنائي نحن نعتمد على الأساس 2 بدلًا من 10
لذا كل خانة هنا تمثل الرقم 2 أس موقعها من اليمين إلى اليسار
بمعنى أن الخانة الأولى من ناحية اليمين تمثل 2 أس 0هكذا 20
والثانية تمثل 21 والثالثة تمثل 22 وهكذا
بالتالي لتحويل 0101 إلى رقم صحيح نقوم بضرب كل خانة بـ 2 أس موقعها ونجمع النواتج

نجمع كل النواتج التي حصلنا عليها 1 + 0 + 4 + 0 = 5 وهذا يعني أن الرقم الثنائي 0101 يمثل الرقم الصحيح 5

بالطبع في الثنائي نحن لا نقول آحاد و عشرات و مئات و آلاف بل نقول الخانة الأولى و الثانية و الثالثة و الرابعة وهكذا
لأن الآحاد والعشرات والمئات والآلاف تكون في النظام العشري وليس الثنائي
أما في الثاني فهي تعتمد فقط على هل الحانة المعينة تحتوي على الرقم 1 أم 0 فقط


حاول دائمًا تخيل جدول وتكتب تحت كل خانة الأساس الذي يجب ضرب الرقم فيه لتحصل على الرقم الصحيح
هكذا:

الرقم الثنائي 1 0 1 0
تسلسل الخانات 20 21 22 23
المعادلة 1 * 20 0 * 21 1 * 22 0 * 23
الناتج 1 0 4 0

نجمع النواتج 1 + 0 + 4 + 0 = 5 وهذا يعني أن الرقم الثنائي 0101 يمثل الرقم الصحيح 5


ماذا عن 1101101 ؟ هل تستطيع تحويله إلى رقم صحيح ؟

الرقم الثنائي 1 0 1 1 0 1 1
تسلسل الخانات 20 21 22 23 24 25 26
المعادلة 1 * 20 0 * 21 1 * 22 1 * 23 0 * 24 1 * 25 1 * 26
الناتج 1 0 4 8 0 32 64

نجمع النواتج 1 + 0 + 4 + 8 + 0 + 32 + 64 = 109 وهذا يعني أن الرقم الثنائي 1101101 يمثل الرقم الصحيح 109

تحويل الأرقام الصحيحة إلى ثنائية

هنا سنقوم بعملية عكسية لتحويل الأرقام الصحيحة إلى الأرقام الثنائية


لاحظ أننا في النظام العشري نحن نقوم بالضرب بـ 10 أس موقع الرقم لنحصل على الرقم الصحيح
فمثلا عندما كان لدينا رقم مثل 495 فهذا يعني أننا قمنا بضرب الرقم في خانة الآحاد 5 بـ 10 أس 0 والعشرات 9 بـ 10 أس 1 والمئات 4 بـ 10 أس 2
وبجمعهم نحصل على الرقم الصحيح 495 هكذا 400 + 90 + 5 = 495

نستطيع عمل نفس الشيء بشكل عكسي بالقسمة على 10 لنحصل على خانات الآحاد والعشرات والمئات والآلاف وهكذا

مثال على الرقم 495

حصلنا على الأرقام 5 و 9 و 4 وهي بالترتيب خانات الآحاد والعشرات والمئات

هكذا كأنك رجعت الرقم 495 إلى خاناته الأصلية 5 و 9 و 4 في النظام العشري وهو الشكل العشري له كقيم آحاد وعشرات ومئات

وإن كنت لا تعرف ما هي باقي القسمة فلقد شرحناها في مقالة العمليات الحسابية في البرمجة
أرجو أن تقرأ الجزء الخاص بباقي القسمة لأننا سنستخدمها كثيرًا هنا


نفس الشيء يمكننا فعله مع الأرقام الثنائية
يمكنك فعل القسمة على 2 بدلًا من 10 لأن النظام الثنائي يعتمد على الأساس 2
لذا عندما تريد تحويل رقم مثل 495 إلى رقم ثنائي تقوم بالقسمة على 2 وتحتفظ بباقي القسمة في كل خطوة
نكرر العملية حتى نحصل على الناتج 0 كرقم صحيح

هكذا سترجع الرقم 495 إلى شكله في النظام الثنائي

لنرى مثال بسيط على ذلك

مثال لنحول الرقم 13 إلى رقم ثنائي

سنقوم بقسمة 13 على 2 ونحتفظ بباقي القسمة في كل خطوة والذي سيكون 1 لأن 13 % 2 = 1 ثم ناتج القسمة الصحيح من 13 / 2 وهو 6 نقسمه على 2 وهكذا نكرر حتى نحصل على الناتج 0 كرقم صحيح

بما أن الناتج أصبح 0 فإننا نتوقف لأن 0 / 2 يعطينا 0 دائمًا وباقي القسمة يكون 0 أيضًا

نقوم بكتابة كل باقي قسمة جمعناها من اليمين لليسار لنحصل على الرقم الثنائي 1101 وهو يمثل الرقم الصحيح 13 فعلًا
هكذا أنت حولت الرقم الصحيح 13 إلى الرقم الثنائي 1101
بمعنى أنك بالقسمة على 2 أنت حولته للشكله في النظام الثنائي
مثل ما كنت ستفعل بالقسمة على 10 لتحويله للشكله في النظام العشري كقيم آحاد وعشرات ومئات


يمكنك أيضًا عمل جدول لتسهيل العملية

الرقم المعادلة باقي القسمة العدد الصحيح
13 13 / 2 = 6.5 1 6
6 6 / 2 = 3 0 3
3 3 / 2 = 1.5 1 1
1 1 / 2 = 0.5 1 0

نقوم بكتابة الأرقام التي جمعناها من اليمين لليسار 1101 وهو بالطبع الرقم 13 في النظام الثنائي


مثال آخر لنحول الرقم 109 إلى رقم ثنائي

الرقم المعادلة باقي القسمة العدد الصحيح
109 109 / 2 = 54.5 1 54
54 54 / 2 = 27 0 27
27 27 / 2 = 13.5 1 13
13 13 / 2 = 6.5 1 6
6 6 / 2 = 3 0 3
3 3 / 2 = 1.5 1 1
1 1 / 2 = 0.5 1 0

نقوم بكتابة الارقام التي جمعناها من اليمين لليسار لنحصل على الرقم الثنائي 1101101 وهو يمثل الرقم الصحيح 109


مثال آخر لنحول الرقم 495 إلى رقم ثنائي

الرقم المعادلة باقي القسمة العدد الصحيح
495 495 / 2 = 247.5 1 247
247 247 / 2 = 123.5 1 123
123 123 / 2 = 61.5 1 61
61 61 / 2 = 30.5 1 30
30 30 / 2 = 15 0 15
15 15 / 2 = 7.5 1 7
7 7 / 2 = 3.5 1 3
3 3 / 2 = 1.5 1 1
1 1 / 2 = 0.5 1 0

نقوم بكتابة الارقام التي جمعناها من اليمين لليسار لنحصل على الرقم الثنائي 111101111 الذي يمثل الرقم الصحيح 495

ماذا عن الأنظمة الأخرى ؟

لنتخيل وجود نظام رباعي مثلاً يعتمد على الأرقام 0 و 1 و 2 و 3 فقط
هل يمكننا تحويل الأرقام الصحيحة إلى هذا النظام ؟

الجواب نعم يمكننا ذلك بالطبع
أحضر أي رقم صحيح وليكن 495 ثم قم بالقسمة على 4 بدلًا من 10 لتحصل على الرقم الصحيح في النظام الرباعي

نقوم بكتابة الأرقام التي جمعناها من اليمين لليسار لنحصل على الرقم في النظام الرباعي 13233 وهو يمثل الرقم الصحيح 495 فعلًا والرقم 13233 يمثل الرقم الصحيح 495 في النظام الرباعي

يمكننا إثبات هذا بمحاولة تحويل 13233 إلى النظام العشري

الرقم الرباعي الخانة الأولى الخانة الثانية الخانة الثالثة الخانة الرابعة الخانة الخامسة
13233 3 3 2 3 1

هنا نقوم بضرب كل خانة بـ 4 أس موقعها ونجمع النواتج

نجمع النواتج 3 + 12 + 32 + 192 + 256 = 495 وهذا يعني أن الرقم الرباعي 13233 يمثل الرقم الصحيح 495

هكذا يمكننا تحويل الأرقام الصحيحة إلى أي نظام نريده بالقسمة على الأساس الذي نريده والعكس

الأنظمة الأساسية في البرمجة

في عالم البرمجة نحن نعتمد على 4 أنظمة أساسية وهي النظام الثنائي و النظام العشري و النظام الثماني و النظام السداسي العشري
وهذه الأنظمة تعتبر الأساس في عالم البرمجة والحاسوب

بالإنجليزية تسمى هذه الأنظمة كالتالي:

حيث أن:

لاحظ أن في النظام الـ Hexadecimal نحن نستخدم الأرقام A و B و C و D و E و F لتمثيل الأرقام 10 و 11 و 12 و 13 و 14 و 15 على التوالي


وبالطبع يمكنك تحويل من أي نظام إلى أي نظام آخر بالقسمة على الأساس الذي تريده والعكس
فمثلاً يمكنك تحويل الرقم 495 من النظام الـ Decimal إلى النظام الـ Hexadecimal بالقسمة على 16

نقوم بكتابة الأرقام التي جمعناها من اليمين لليسار لنحصل على الرقم في النظام الـ Hexadecimal هكذا 1EF
ولاحظ أن 15 تمثل الرقم F في النظام الـ Hexadecimal و 14 تمثل الرقم E لذالك كتبنا الرقم بهذا الشكل 1EF

نستطيع تحويله وارجاعه إلى النظام الـ Decimal لنتأكد من صحة التحويل بالضرب بالأساس 16

الرقم الـ Hexadecimal الخانة الأولى الخانة الثانية الخانة الثالثة
1EF F E 1

هنا نقوم بضرب كل خانة بـ 16 أس موقعها ونجمع النواتج

نجمع النواتج 15 + 224 + 256 = 495 وهذا يعني أن الرقم1EF هو الرقم 495 لكن في النظام الـ Hexadecimal

تحويل الأرقام من النظام الـ Hexadecimal إلى النظام الـ Binary

هناك طريقتين لتحويل الرقم من النظام الـ Hexadecimal إلى النظام الـ Binary
الطريقة الأولى تعتمد على تحويل الرقم إلى النظام الـ Decimal ثم من الـ Decimal إلى الـ Binary
والطريقة الثانية تعتمد على تحويل الرقم مباشرة من الـ Hexadecimal إلى الـ Binary

الطريقة الأولى تعتمد على القواعد السابقة التي تعلمتها
لنحول الرقم 1EF إلى النظام الـ Binary

أولًا نحول الرقم 1EF إلى النظام الـ Decimal

نجمع النواتج 15 + 224 + 256 = 495 وهذا يعني أن الرقم 1EF يمثل الرقم 495 في النظام الـ Decimal

الآن نحول الرقم 495 إلى النظام الـ Binary

نقوم بكتابة الأرقام التي جمعناها من اليمين لليسار لنحصل على الرقم الـ Binary وهو 111101111 وهو يمثل الرقم 495
والذي يمثل الرقم 1EF في النظام الـ Hexadecimal أيضًا

لذا معلومة بسيطة هنا، بما أن 1EF يمثل الرقم 495 في النظام الـ Hexadecimal
بالتالي إذا كان تحويل 495 إلى النظام الـ Binary يعطينا الرقم 111101111
فإن تحويل 1EF إلى النظام الـ Binary يعطينا نفس الرقم 111101111

الطريقة الثانية لتحويل الرقم من الـ Hexadecimal إلى الـ Binary تعتمد على معرفة الأرقام الـ Hexadecimal وما يمثلها في الـ Binary
فمثلًا الرقم 1 يمثل 0001 والرقم 2 يمثل 0010 و 3 يمثل 0011 وهكذا

وهذا الجدول يوضح الأرقام الـ Hexadecimal وما تمثله في الـ Binary

الرقم الـ Hexadecimal الرقم الـ Binary
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

هنا الرقم 1 يمثل 0001 و E والذي يمثل 14 يمثل 1110 و F والذي يمثل 15 يمثل 1111

الرقم الـ Hexadecimal F E 1
الرقم الـ Binary 1111 1110 0001

نكتب الأرقام بجانب بعضها لنحصل على الرقم الـ Binary 000111101111 وهو يمثل الرقم 1EF في النظام الـ Hexadecimal
وهو نفس الرقم الذي حصلنا عليه بالطريقة الأولى وتذكر أن الأصفار الزائدة التي على اليسار لا تؤثر على الرقم نفسه

تحويل الأرقام من النظام الـ Binary إلى النظام الـ Hexadecimal

وبالطبع يمكنك فعل ذلك بالعكس أيضًا أي تحويل الرقم الـ Binary إلى الرقم الـ Hexadecimal بنفس الطريقة

مثال على ذلك تحويل الرقم الـ Binary 1101101 إلى الرقم الـ Hexadecimal
فقط قسم الرقم الـ Binary إلى مجموعات من 4 أرقام وقم بتحويل كل مجموعة إلى الرقم الـ Hexadecimal

بالتالي الرقم الـ Binary 1101101 يمكن تقسيمه إلى 1101 و 0110
والرقم 1101 يمثل الرقم 13 والذي يمثل الرقم D في النظام الـ Hexadecimal
والرقم 0110 يمثل الرقم 6
هكذا تكون النتيجة النهائية 6D

يمكنني عرضها في جدول لتوضيح الفكرة

الرقم الـ Binary 1101 0110
الرقم الـ Hexadecimal D 6

لنأخذ مثال آخر على تحويل الرقم 1011100010010111 من الـ Binary إلى الـ Hexadecimal

نقوم بتقسيم الرقم إلى مجموعات من 4 أرقام كما في الجدول التالي

الرقم الـ Binary 0111 1001 1000 1011
الرقم الـ Hexadecimal 7 9 8 B

نكتب الأرقام بجانب بعضها لنحصل على الرقم الـ Hexadecimal B897 وهو يمثل الرقم 1011100010010111 في النظام الـ Binary

خاتمة

كنت أود أن اعطيك أمثله أخرى على التحويلات لكنني اكتفيت بإعطائك الفكرة العامة
قد أكون فوت بعض الحيل في التخويلات لكن لا بأس المهم تكون الفكرة وصلت بشكل مبسط
ويمكننا تلخيص ما سبق في الجدول التالي

النظام الأرقام الأساس تسلسل الخانات
Binary 0، 1 2 2^0، 2^1، 2^2، 2^3، ...
Decimal 0، 1، 2، 3، 4، 5، 6، 7، 8، 9 10 10^0، 10^1، 10^2، 10^3، ...
Octal 0، 1، 2، 3، 4، 5، 6، 7 8 8^0، 8^1، 8^2، 8^3، ...
Hexadecimal 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، A، B، C، D، E، F 16 16^0، 16^1، 16^2، 16^3، ...

وبالتالي يمكنك تحويل الأرقام بين هذه الأنظمة كما وضحنا سابقًا عن طريق القسمة على الأساس الذي تريده
أو يمكنك تحويل الأرقام من أي نظام إلى النظام الـ Decimal ثم من الـ Decimal إلى النظام الآخر الذي تريده
كنظام وسيط للتحويل بين الأنظمة

يمكننا إنشاء جدول بسيط يوضح التحويلات من النظام الـ Binary إلى النظام الـ Decimal والنظام الـ Octal والنظام الـ Hexadecimal والعكس

النظام الـ Decimal النظام الـ Binary النظام الـ Octal النظام الـ Hexadecimal
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

أتمنى أن تكون الفكرة وصلت وأن تكون قد استفدت من هذا المقال