تنسيق رقم الحاسوب
تنسيق الأرقام الحاسوبي هو التمثيل الداخلي للقيم العددية في مكونات الأجهزة الرقمية وبرمجياتها، مثل الحواسيب القابلة للبرمجة والآلات الحاسبة . [ 1 ] تُخزَّن القيم العددية على شكل مجموعات من البتات ، مثل البايتات والكلمات. يُختار التشفير بين القيم العددية وأنماط البتات لتسهيل تشغيل الحاسوب؛ ويتطلب التشفير المستخدم في مجموعة تعليمات الحاسوب عادةً تحويلًا للاستخدام الخارجي، مثل الطباعة والعرض. قد تختلف أنواع المعالجات المختلفة في تمثيلاتها الداخلية للقيم العددية، وتُستخدم اصطلاحات مختلفة للأعداد الصحيحة والحقيقية. تُجرى معظم العمليات الحسابية باستخدام تنسيقات أرقام تتناسب مع سجل المعالج ، ولكن بعض أنظمة البرمجيات تسمح بتمثيل أعداد كبيرة جدًا باستخدام كلمات متعددة من الذاكرة.
تمثيل الأعداد الثنائية
تمثل الحواسيب البيانات في مجموعات من الأرقام الثنائية. ويتكون هذا التمثيل من بتات، والتي بدورها تُجمع في مجموعات أكبر مثل البايتات.
| سلسلة ثنائية | القيمة الثمانية |
|---|---|
| ٠٠٠ | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
| طول سلسلة البتات (ب) | عدد القيم الممكنة (N) |
|---|---|
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 |
| 6 | 64 |
| 7 | 128 |
| 8 | 256 |
| 9 | 512 |
| 10 | 1024 |
| ... | |
البت هو رقم ثنائي يمثل إحدى حالتين . يمكن فهم مفهوم البت على أنه قيمة إما 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 للأرقام السداسية عشرية.
التحويل بين الأنظمة الأساسية
| عشري | ثنائي | ثماني | النظام الست عشري |
|---|---|---|---|
| 0 | ٠٠٠٠٠٠ | ٠٠ | ٠٠ |
| 1 | 000001 | 01 | 01 |
| 2 | 000010 | 02 | 02 |
| 3 | 000011 | 03 | 03 |
| 4 | ٠٠٠١٠٠ | 04 | 04 |
| 5 | ٠٠٠١٠١ | 05 | 05 |
| 6 | ٠٠٠١١٠ | 06 | 06 |
| 7 | ٠٠٠١١١ | 07 | 07 |
| 8 | ٠٠١٠٠٠ | 10 | 08 |
| 9 | 001001 | 11 | 09 |
| 10 | ٠٠١٠١٠ | 12 | 0A |
| 11 | 001011 | 13 | 0B |
| 12 | 001100 | 14 | 0 درجة مئوية |
| 13 | 001101 | 15 | 0D |
| 14 | 001110 | 16 | 0E |
| 15 | ٠٠١١١١ | 17 | 0 فهرنهايت |
كل نظام من هذه الأنظمة العددية هو نظام موضعي، ولكن بينما تمثل الأوزان العشرية قوى العدد 10، تمثل الأوزان الثمانية قوى العدد 8، وتمثل الأوزان السداسية عشرية قوى العدد 16. لتحويل الأرقام من النظام السداسي عشري أو الثماني إلى النظام العشري، يُضرب كل رقم في قيمة موقعه، ثم تُجمع النتائج. على سبيل المثال:
تمثيل الكسور في النظام الثنائي
الأعداد ذات الفاصلة الثابتة
يمكن أن يكون تنسيق النقطة الثابتة مفيدًا لتمثيل الكسور في النظام الثنائي.
يجب تحديد عدد البتات اللازمة للدقة والنطاق المطلوبين لتخزين الأجزاء الكسرية والصحيحة من العدد. على سبيل المثال، باستخدام تنسيق 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 بايت من الذاكرة:
| البايت 0 | S | 10x | 9x | 8x | 7x | 6x | 5x | x4 |
|---|---|---|---|---|---|---|---|---|
| البايت 1 | x3 | x2 | x1 | x0 | m51 | m50 | م49 | م48 |
| البايت 2 | م47 | م46 | م45 | م44 | م43 | م42 | م41 | m40 |
| البايت 3 | م39 | م38 | م37 | م36 | م35 | م34 | م33 | م32 |
| البايت 4 | م31 | م30 | م29 | م28 | م27 | م26 | م25 | م24 |
| البايت 5 | م23 | م22 | م21 | m20 | م19 | م18 | م17 | m16 |
| البايت 6 | m15 | m14 | م13 | م12 | م11 | m10 | م9 | م8 |
| البايت 7 | م7 | م6 | م5 | م4 | م3 | م2 | م1 | m0 |
حيث يرمز "S" إلى بت الإشارة، و"x" إلى بت الأس، و"m" إلى بت الجزء المهم. بعد استخراج البتات هنا، يتم تحويلها باستخدام العملية الحسابية التالية:
- < الإشارة > × (1 + < الكسر المعنوي > ) × 2 < الأس > − 1023
يوفر هذا النظام أرقامًا صالحة حتى حوالي 15 رقمًا عشريًا، مع نطاق الأرقام التالي:
| أقصى | الحد الأدنى | |
|---|---|---|
| إيجابي | 1.797693134862231E+308 | 4.940656458412465E-324 |
| سلبي | -4.940656458412465E-324 | -1.797693134862231E+308 |
تحدد المواصفات أيضًا العديد من القيم الخاصة التي لا تُعتبر أرقامًا مُعرّفة، وتُعرف باسم NaNs ، اختصارًا لـ "ليس رقمًا". وتستخدمها البرامج للإشارة إلى العمليات غير الصالحة وما شابه ذلك.
تستخدم بعض البرامج أيضًا أرقامًا عشرية ذات 32 بت. ويستخدم النظام الأكثر شيوعًا جزءًا ذا دلالة مكونًا من 23 بت مع بت إشارة، بالإضافة إلى أس مكون من 8 بت بتنسيق "زيادة-127"، مما ينتج عنه سبعة أرقام عشرية صالحة.
| البايت 0 | S | 7x | 6x | 5x | x4 | x3 | x2 | x1 |
|---|---|---|---|---|---|---|---|---|
| البايت 1 | x0 | م22 | م21 | m20 | م19 | م18 | م17 | m16 |
| البايت 2 | m15 | m14 | م13 | م12 | م11 | m10 | م9 | م8 |
| البايت 3 | م7 | م6 | م5 | م4 | م3 | م2 | م1 | m0 |
يتم تحويل البتات إلى قيمة عددية باستخدام العملية الحسابية التالية:
- < الإشارة > × (1 + < الكسر المعنوي > ) × 2 < الأس > − 127
مما يؤدي إلى النطاق التالي من الأرقام:
| أقصى | الحد الأدنى | |
|---|---|---|
| إيجابي | 3.402823E+38 | 2.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 .
- ↑ جون ستوكس (2007). داخل الآلة: مقدمة مصورة للمعالجات الدقيقة وهندسة الحاسوب . دار نشر نو ستارش. ص 66. ISBN 978-1-59327-104-6.
- ↑ "تعريف البايت" . تم الاطلاع عليه بتاريخ 24 أبريل 2012 .
- ↑ "المعالج الدقيق ووحدة المعالجة المركزية (CPU)" . قاموس الشبكات. مؤرشف من الأصل في 3 أكتوبر 2017. تم الاطلاع عليه في 1 مايو 2012 .
- ↑ "تعريف كلمة nybble" . تم الاطلاع عليه بتاريخ 3 مايو 2012 .
- ↑ "Nybble" . TechTerms.com . تم الاطلاع عليه بتاريخ 3 مايو 2012 .
- ↑ غوبل، غريغ. "تنسيق ترقيم الكمبيوتر" . تم الاسترجاع في 10 سبتمبر 2012 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link )
- الحساب الحاسوبي
- أنظمة الأرقام
