تنسيق رقم الحاسوب

تنسيق الأرقام الحاسوبي هو التمثيل الداخلي للقيم العددية في مكونات الأجهزة الرقمية وبرمجياتها، مثل الحواسيب القابلة للبرمجة والآلات الحاسبة . [ 1 ] تُخزَّن القيم العددية على شكل مجموعات من البتات ، مثل البايتات والكلمات. يُختار التشفير بين القيم العددية وأنماط البتات لتسهيل تشغيل الحاسوب؛ ويتطلب التشفير المستخدم في مجموعة تعليمات الحاسوب عادةً تحويلًا للاستخدام الخارجي، مثل الطباعة والعرض. قد تختلف أنواع المعالجات المختلفة في تمثيلاتها الداخلية للقيم العددية، وتُستخدم اصطلاحات مختلفة للأعداد الصحيحة والحقيقية. تُجرى معظم العمليات الحسابية باستخدام تنسيقات أرقام تتناسب مع سجل المعالج ، ولكن بعض أنظمة البرمجيات تسمح بتمثيل أعداد كبيرة جدًا باستخدام كلمات متعددة من الذاكرة.

تمثيل الأعداد الثنائية

تمثل الحواسيب البيانات في مجموعات من الأرقام الثنائية. ويتكون هذا التمثيل من بتات، والتي بدورها تُجمع في مجموعات أكبر مثل البايتات.

الجدول 1: من النظام الثنائي إلى النظام الثماني
سلسلة ثنائيةالقيمة الثمانية
٠٠٠0
0011
0102
0113
1004
1015
1106
1117
الجدول 2: عدد القيم لسلسلة بتات.
طول سلسلة البتات (ب)عدد القيم الممكنة (N)
12
24
38
416
532
664
7128
8256
9512
101024
...
ب{\displaystyle b}2ب=شمال{\displaystyle 2^{b}=N}

البت هو رقم ثنائي يمثل إحدى حالتين . يمكن فهم مفهوم البت على أنه قيمة إما 1 أو 0 ، تشغيل أو إيقاف ، نعم أو لا ، صحيح أو خطأ ، أو مشفر بواسطة مفتاح أو زر تبديل من نوع ما.

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

مع ازدياد عدد البتات المكونة لسلسلة نصية، يزداد عدد التوليفات الممكنة للقيمتين 0 و 1 بشكل أُسّي . يسمح البت الواحد بتوليفتين فقط، ويمكن لتوليفة بتين تكوين أربع قيم منفصلة، ​​وثلاث بتات لتكوين ثماني قيم، وهكذا، ويزداد العدد وفقًا للصيغة 2^ n . يتضاعف عدد التوليفات الممكنة مع كل رقم ثنائي يُضاف، كما هو موضح في الجدول 2.

تُستخدم المجموعات التي تحتوي على عدد محدد من البتات لتمثيل أشياء مختلفة ولها أسماء محددة.

البايت هو سلسلة بتات تحتوي على عدد البتات اللازمة لتمثيل حرف . في معظم الحواسيب الحديثة ، تكون هذه السلسلة ثمانية بتات. ولأن تعريف البايت مرتبط بعدد البتات المكونة للحرف، فقد استخدمت بعض الحواسيب القديمة طول بتات مختلفًا للبايت. [ 2 ] في العديد من بنى الحواسيب ، يُعد البايت أصغر وحدة قابلة للعنونة ، أو ما يُعرف بذرة العنونة. على سبيل المثال، على الرغم من أن المعالجات ذات 64 بت قد تعنون الذاكرة بـ 64 بتًا في المرة الواحدة، إلا أنها قد تقسم تلك الذاكرة إلى أجزاء من ثمانية بتات. يُطلق على هذا النوع من الذاكرة اسم الذاكرة القابلة للعنونة بالبايت. تاريخيًا، كانت العديد من وحدات المعالجة المركزية تقرأ البيانات بمضاعفات ثمانية بتات. [ 3 ] ولأن حجم البايت المكون من ثمانية بتات شائع جدًا، ولكن تعريفه غير موحد، يُستخدم مصطلح "ثمانية بتات" أحيانًا لوصف سلسلة من ثمانية بتات بشكل صريح.

النيبل (أو النيبل ) هو عدد يتكون من أربعة بتات. [ 4 ] ولأنه نصف بايت ، فقد سُمّي النيبل بهذا الاسم توريةً. قد يحتاج الشخص إلى عدة نيبلات للحصول على لقمة واحدة من شيء ما؛ وبالمثل، فإن النيبل هو جزء من البايت. ولأن أربعة بتات تسمح بستة عشر قيمة، يُعرف النيبل أحيانًا بالرقم الست عشري . [ 5 ]

عرض الأرقام الثمانية والسداسية عشرية

يُعدّ الترميز الثماني والسداسي عشري طريقتين ملائمتين لتمثيل الأعداد الثنائية، كما هو مستخدم في الحواسيب. غالبًا ما يحتاج مهندسو الحاسوب إلى كتابة الكميات الثنائية، ولكن عمليًا، تُعدّ كتابة عدد ثنائي مثل 1001001101010001 عملية شاقة وعرضة للأخطاء. لذلك، تُكتب الكميات الثنائية بنظام أساسه 8، أو "الثماني"، أو، وهو الأكثر شيوعًا، بنظام أساسه 16، أو "السداسي عشري" ( hex ). في النظام العشري، توجد 10 خانات، من 0 إلى 9، تُجمع لتكوين الأعداد. أما في النظام الثماني، فتوجد 8 خانات فقط، من 0 إلى 7. أي أن قيمة العدد الثماني "10" هي نفسها قيمة العدد العشري "8"، وقيمة العدد الثماني "20" هي نفسها قيمة العدد العشري "16"، وهكذا. في النظام الست عشري، يوجد 16 رقمًا، من 0 إلى 9، متبوعةً، اصطلاحًا، بالأحرف من A إلى F. أي أن العدد "10" في النظام الست عشري يُعادل العدد "16" في النظام العشري، والعدد "20" في النظام الست عشري يُعادل العدد "32" في النظام العشري. يوضح الجدول أدناه مثالًا ومقارنةً للأعداد في أنظمة العد المختلفة.

عند كتابة الأرقام، يتم استخدام أحرف التنسيق لوصف نظام الأرقام، على سبيل المثال 000_0000B أو 0b000_00000 للأرقام الثنائية و 0F8H أو 0xf8 للأرقام السداسية عشرية.

التحويل بين الأنظمة الأساسية

الجدول 3: مقارنة القيم في قواعد مختلفة
عشريثنائيثمانيالنظام الست عشري
0٠٠٠٠٠٠٠٠٠٠
10000010101
20000100202
30000110303
4٠٠٠١٠٠0404
5٠٠٠١٠١0505
6٠٠٠١١٠0606
7٠٠٠١١١0707
8٠٠١٠٠٠1008
90010011109
10٠٠١٠١٠120A
11001011130B
12001100140 درجة مئوية
13001101150D
14001110160E
15٠٠١١١١170 فهرنهايت

كل نظام من هذه الأنظمة العددية هو نظام موضعي، ولكن بينما تمثل الأوزان العشرية قوى العدد 10، تمثل الأوزان الثمانية قوى العدد 8، وتمثل الأوزان السداسية عشرية قوى العدد 16. لتحويل الأرقام من النظام السداسي عشري أو الثماني إلى النظام العشري، يُضرب كل رقم في قيمة موقعه، ثم تُجمع النتائج. على سبيل المثال:

ثماني 756=(7×82)+(5×81)+(6×80)=(7×64)+(5×8)+(6×1)=448+40+6=عشري 494عرافة 3ب2=(3×162)+(11×161)+(2×160)=(3×256)+(11×16)+(2×1)=768+176+2=عشري 946{\displaystyle {\begin{aligned}&{\text{octal }}756\\[5pt]={}&(7\times 8^{2})+(5\times 8^{1})+(6\times 8^{0})\\[5pt]={}&(7\times 64)+(5\times 8)+(6\times 1)\\[5pt]={}&448+40+6\\[5pt]={}&{\text{decimal }}494\end{aligned}}\qquad {\begin{aligned}&{\text{hex }}\mathrm {3b2} \\[5pt]={}&(3\times 16^{2})+(11\times 16^{1})+(2\times 16^{0})\\[5pt]={}&(3\times 256)+(11\times 16)+(2\times 1)\\[5pt]={}&768+176+2\\[5pt]={}&{\text{decimal }}946\end{aligned}}}

تمثيل الكسور في النظام الثنائي

الأعداد ذات الفاصلة الثابتة

يمكن أن يكون تنسيق النقطة الثابتة مفيدًا لتمثيل الكسور في النظام الثنائي.

يجب تحديد عدد البتات اللازمة للدقة والنطاق المطلوبين لتخزين الأجزاء الكسرية والصحيحة من العدد. على سبيل المثال، باستخدام تنسيق 32 بت، يمكن استخدام 16 بت للجزء الصحيح و16 بت للجزء الكسري.

يلي بت الثمانية بت الأربعة، ثم بت الاثنين، ثم بت الواحد. وتستمر بتات الكسور في اتباع النمط الذي حددته بتات الأعداد الصحيحة. البت التالي هو بت النصف، ثم بت الربع، ثم بت الثمن، وهكذا. على سبيل المثال:

بتات عددية صحيحةبتات كسرية
0.500=١/٢=00000000 00000000.10000000 00000000
1.250=1 + 1 / 4=00000000 00000001.01000000 00000000
7.375=7 + 3 / 8=00000000 00000111.01100000 00000000

لا يمكن لهذا النوع من الترميز تمثيل بعض القيم بالنظام الثنائي. على سبيل المثال، الكسر ١/٥ ، أو ٠.٢ بالنظام العشري، ستكون أقرب القيم التقريبية كما يلي:

13107 / 65536=00000000 00000000.00110011 00110011=0.1999969... بالصيغة العشرية
13108 / 65536=00000000 00000000.00110011 00110100=0.2000122... بالصيغة العشرية

حتى مع استخدام المزيد من الأرقام، يبقى التمثيل الدقيق مستحيلاً. فالعدد ١/٣ ، المكتوب بالنظام العشري على النحو التالي : ٠ ٫ ٣٣٣٣٣٣٣٣٣ ... ، يستمر إلى ما لا نهاية. وإذا توقف قبل الأوان، فلن تمثل القيمة ١/٣ بدقة .

الأرقام العشرية

على الرغم من استخدام كل من الأعداد الصحيحة غير الموقعة والموقعة في الأنظمة الرقمية، إلا أن العدد الصحيح ذو 32 بت لا يكفي حتى للتعامل مع كامل نطاق الأعداد التي يمكن للآلة الحاسبة معالجتها، وهذا لا يشمل الكسور. وللحصول على دقة ونطاق أوسع للأعداد الحقيقية ، علينا التخلي عن الأعداد الصحيحة الموقعة والأعداد ذات الفاصلة الثابتة والتحول إلى صيغة " الفاصلة العائمة ".

في النظام العشري، نحن على دراية بالأعداد العشرية ذات الفاصلة العائمة من الشكل ( التدوين العلمي ):

1.1030402 × 10⁵ = 1.1030402 × 100000 = 110304.02

أو باختصار أكثر:

1.1030402E5

وهذا يعني "1.1030402 مضروبًا في 1 متبوعًا بخمسة أصفار". لدينا قيمة عددية معينة (1.1030402) تُعرف باسم " العدد المعنوي "، مضروبة في قوة من قوى العدد 10 (E5، أي 10⁵ أو 100,000)، تُعرف باسم " الأس ". إذا كان لدينا أس سالب، فهذا يعني أن العدد مضروب في 1 بعدد المنازل العشرية التي تساوي هذا العدد. على سبيل المثال:

2.3434E 6 = 2.3434 × 10 −6 = 2.3434 × 0.000001 = 0.0000023434

تكمن ميزة هذه الطريقة في أنه باستخدام الأس، يمكننا الحصول على نطاق أوسع بكثير من الأرقام، حتى لو كان عدد الأرقام في الجزء الدال، أو "الدقة العددية"، أصغر بكثير من النطاق. ويمكن تعريف تنسيقات مماثلة للأعداد العشرية الثنائية لأجهزة الحاسوب. يوجد عدد من هذه التنسيقات، وأكثرها شيوعًا هو ما حدده معهد مهندسي الكهرباء والإلكترونيات (IEEE). يحدد معيار IEEE 754-2008 تنسيقًا للأعداد العشرية 64 بت بالمواصفات التالية:

  • أس ثنائي مكون من 11 بت، باستخدام تنسيق "زيادة-1023". تعني الزيادة-1023 أن الأس يظهر كعدد صحيح ثنائي غير مُوَقَّع يتراوح بين 0 و2047؛ وطرح 1023 يعطي القيمة المُوَقَّعة الفعلية.
  • جزء ذو دلالة مكون من 52 بت، وهو أيضًا عدد ثنائي غير موقع، يحدد قيمة كسرية مع وجود "1" ضمنيًا في البداية.
  • بت الإشارة ، الذي يعطي إشارة الرقم.

مع تخزين البتات في 8 بايت من الذاكرة:

البايت 0S10x9x8x7x6x5xx4
البايت 1x3x2x1x0m51m50م49م48
البايت 2م47م46م45م44م43م42م41m40
البايت 3م39م38م37م36م35م34م33م32
البايت 4م31م30م29م28م27م26م25م24
البايت 5م23م22م21m20م19م18م17m16
البايت 6m15m14م13م12م11m10م9م8
البايت 7م7م6م5م4م3م2م1m0

حيث يرمز "S" إلى بت الإشارة، و"x" إلى بت الأس، و"m" إلى بت الجزء المهم. بعد استخراج البتات هنا، يتم تحويلها باستخدام العملية الحسابية التالية:

< الإشارة > × (1 + < الكسر المعنوي > ) × 2 < الأس > 1023

يوفر هذا النظام أرقامًا صالحة حتى حوالي 15 رقمًا عشريًا، مع نطاق الأرقام التالي:

أقصىالحد الأدنى
إيجابي1.797693134862231E+3084.940656458412465E-324
سلبي-4.940656458412465E-324-1.797693134862231E+308

تحدد المواصفات أيضًا العديد من القيم الخاصة التي لا تُعتبر أرقامًا مُعرّفة، وتُعرف باسم NaNs ، اختصارًا لـ "ليس رقمًا". وتستخدمها البرامج للإشارة إلى العمليات غير الصالحة وما شابه ذلك.

تستخدم بعض البرامج أيضًا أرقامًا عشرية ذات 32 بت. ويستخدم النظام الأكثر شيوعًا جزءًا ذا دلالة مكونًا من 23 بت مع بت إشارة، بالإضافة إلى أس مكون من 8 بت بتنسيق "زيادة-127"، مما ينتج عنه سبعة أرقام عشرية صالحة.

البايت 0S7x6x5xx4x3x2x1
البايت 1x0م22م21m20م19م18م17m16
البايت 2m15m14م13م12م11m10م9م8
البايت 3م7م6م5م4م3م2م1m0

يتم تحويل البتات إلى قيمة عددية باستخدام العملية الحسابية التالية:

< الإشارة > × (1 + < الكسر المعنوي > ) × 2 < الأس > 127

مما يؤدي إلى النطاق التالي من الأرقام:

أقصىالحد الأدنى
إيجابي3.402823E+382.802597E-45
سلبي-2.802597E-45-3.402823E+38

تُعرف هذه الأرقام العشرية بشكل عام باسم "الأعداد الحقيقية" أو "الأعداد العشرية"، ولكن مع وجود عدد من الاختلافات:

تُسمى قيمة الفاصلة العائمة ذات 32 بت أحيانًا "real32" أو "single"، مما يعني "قيمة الفاصلة العائمة ذات الدقة المفردة".

يُطلق على العدد العشري ذو 64 بت أحيانًا اسم "real64" أو "double"، مما يعني "قيمة الفاصلة العائمة ذات الدقة المزدوجة".

تم اختيار العلاقة بين الأرقام وأنماط البتات لتسهيل التعامل معها في الحاسوب؛ إذ يمكن أن تمثل ثمانية بايتات مخزنة في ذاكرة الحاسوب عددًا حقيقيًا من 64 بت، أو عددين حقيقيين من 32 بت، أو أربعة أعداد صحيحة (مُوقّعة أو غير مُوقّعة)، أو أي نوع آخر من البيانات التي تتسع في ثمانية بايتات. والفرق الوحيد يكمن في كيفية تفسير الحاسوب لها. فلو خزّن الحاسوب أربعة أعداد صحيحة غير مُوقّعة ثم قرأها من الذاكرة كعدد حقيقي من 64 بت، لكانت النتيجة في أغلب الأحيان عددًا حقيقيًا صحيحًا تمامًا، وإن كانت بيانات غير صالحة.

لا يمكن تمثيل سوى نطاق محدود من الأعداد الحقيقية باستخدام عدد معين من البتات. قد تحدث عمليات حسابية تجاوزات أو نقص في سعة الذاكرة، مما ينتج عنه قيمة كبيرة جدًا أو صغيرة جدًا بحيث لا يمكن تمثيلها.

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

الجزء الدال هو كسر ثنائي لا يتطابق بالضرورة تمامًا مع كسر عشري. في كثير من الحالات، لا يتطابق مجموع مقلوب قوى العدد 2 مع كسر عشري محدد، وبالتالي ستكون نتائج العمليات الحسابية غير دقيقة بعض الشيء. على سبيل المثال، الكسر العشري "0.1" يكافئ كسرًا ثنائيًا متكررًا بلا نهاية: 0.000110011 ... [ 6 ]

الأرقام في لغات البرمجة

يتطلب البرمجة بلغة التجميع من المبرمج تتبع تمثيل الأرقام. عندما لا يدعم المعالج عملية حسابية معينة، يجب على المبرمج ابتكار خوارزمية مناسبة وتسلسل تعليمات لتنفيذ العملية؛ وفي بعض المعالجات الدقيقة، حتى ضرب الأعداد الصحيحة يتطلب تنفيذه برمجياً.

تُتيح لغات البرمجة عالية المستوى ، مثل روبي وبايثون ، مفهومًا مجردًا للعدد، والذي قد يكون من نوع موسع مثل العدد النسبي ، أو العدد الكبير ، أو العدد المركب . تُنفَّذ العمليات الحسابية بواسطة دوال مكتبية مُضمَّنة في تطبيق اللغة. يستدعي رمز رياضي مُحدد في شفرة المصدر، عبر تحميل المعاملات الزائد ، شفرة كائنية مختلفة تتناسب مع تمثيل النوع العددي؛ وتُكتب العمليات الحسابية على أي عدد - سواء كان مُوَقَّعًا، أو غير مُوَقَّع، أو نسبيًا، أو ذا فاصلة عائمة، أو ذا فاصلة ثابتة، أو صحيحًا، أو مركبًا - بنفس الطريقة تمامًا.

توفر بعض اللغات، مثل REXX و Java ، عمليات الفاصلة العائمة العشرية، والتي توفر أخطاء التقريب بشكل مختلف.

انظر أيضاً

ملاحظات ومراجع

استندت النسخة الأولية من هذه المقالة إلى مقالة متاحة للعموم من موقع Vectorsite الخاص بـ Greg Goebel .

  1. جون ستوكس (2007). داخل الآلة: مقدمة مصورة للمعالجات الدقيقة وهندسة الحاسوب . دار نشر نو ستارش. ص  66. ISBN 978-1-59327-104-6.
  2. "تعريف البايت" . تم الاطلاع عليه بتاريخ 24 أبريل 2012 .
  3. "المعالج الدقيق ووحدة المعالجة المركزية (CPU)" . قاموس الشبكات. مؤرشف من الأصل في 3 أكتوبر 2017. تم الاطلاع عليه في 1 مايو 2012 .
  4. "تعريف كلمة nybble" . تم الاطلاع عليه بتاريخ 3 مايو 2012 .
  5. "Nybble" . TechTerms.com . تم الاطلاع عليه بتاريخ 3 مايو 2012 .
  6. غوبل، غريغ. "تنسيق ترقيم الكمبيوتر" . تم الاسترجاع في 10 سبتمبر 2012 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )