تمثيلات الأرقام المؤشرة (المحتملة للاشارة)

تتطلب الحوسبة استخدام **تمثيلات الأرقام الموقعة** لترميز الأرقام السالبة في أنظمة العد الثنائية.

نُمثّل في الرياضيات الأعداد السالبة في أي نظام عد بوضع علامة ناقص ("-"). ولكن يجب في الذاكرة RAM أو سجلات المعالج CPU تمثيل الأرقام كتسلسلات من البتات دون رموز إضافية. تشمل الطرق الأربع الأكثر شهرة لتوسيع نظام الأعداد الثنائية لتمثيل الأعداد الموقعة: الإشارة-المقدار، المتمم للواحد، المتمم للاثنين، والإزاحة الثنائية. تعتمد بعض الطرق البديلة على إشارات ضمنية بدلاً من الإشارات الصريحة، مثل النظام الثنائي السالب باستخدام الأساس 2−. يمكن ابتكار أساليب مشابهة لأنظمة عد أخرى سواء كانت موجبة أو سالبة أو كسرية، أو تحمل أي تفصيلات أخرى.

يُعد تحديد أي من التمثيلات هو الأفضل أمرًا غير متفق عليه بشكل موضوعي. ويستخدم تمثيل المتمم للاثنين في معظم الحواسيب الحالية للأعداد الصحيحة، على الرغم من أن أجهزة الكمبيوتر المركزية من سلسلة Unisys ClearPath Dorado تعتمد تمثيل المتمم للواحد.

## تاريخ
تميزت الأيام الأولى للحوسبة الرقمية بتنافس الأفكار التي تتعلق بكل من تكنولوجيا الأجهزة وتكنولوجيا الرياضيات (أنظمة الترقيم). وكان أحد الجدالات الكبرى هو ترميز الأرقام السالبة، حيث دافع بعض كبار الخبراء في ذلك العصر عن آرائهم المختلفة بشراسة.
أيد أحد الأحزاب في هذا النقاش نظام المتمم الثنائي ، وهو النظام السائد اليوم، بينما أيد حزب اخر المتمم الأحادي، حيث يتم تشكيل القيمة السالبة عن طريق عكس جميع البتات في تمثيل القيمة الموجبة. ودعمت مجموعة ثالثة الاشارة - المقدار، حيث يتم تغيير القيمة من موجبة إلى سالبة ببساطة عن طريق تغيير البت الأكثر أهمية في التمثيل الثنائي للعدد.

كانت هناك حجج لصالح وضد كل نظام. حيث تسمح طريقة الإشارة - المقدار بتتبع أسهل لعمليات تفريغ الذاكرة للقرص (وهي عملية شائعة في الستينيات) حيث تستخدم القيم الرقمية الصغيرة عددًا أقل من البتات 1. كانت هذه الأنظمة تقوم بالاتمام الأحادي داخليا، لذا كان لا بد من تحويل الأرقام إلى القيم المتممة الأحادية عندما يتم نقلها من سجل إلى وحدة معالجة الرياضيات، ثم تحويلها مرة أخرى إلى إشارة-مقدار عندما يتم نقل النتيجة مرة أخرى إلى السجل. بالنتيجة ستتطلب الإلكترونيات عددًا أكبر من البوابات في هذا النظام مقارنة بالأنظمة الأخرى فكان هذا مصدر قلق رئيسي عندما كانت تكلفة وتغليف الترانزستورات المنفصلة أمرًا بالغ الأهمية. كانت شركة IBM من أوائل المؤيدين لتقنية حجم الإشارة، حيث كانت أجهزة الكمبيوتر من سلسلة 704 و 709 و 709x هي ربما أشهر الأنظمة التي تستخدم هذه التقنية.

سمح المتمم الأحادي بتصميمات أجهزة أبسط إلى حد ما، حيث لم تكن هناك حاجة لتحويل القيم عند تمريرها من وإلى وحدة معالجة الرياضيات. ولكنها تشترك أيضًا في سمة غير مرغوب فيها مع الإشارة - المقدار: القدرة على تمثيل الصفر السالب (−0). يتصرف الصفر السالب تمامًا مثل الصفر الموجب: عند استخدامه كمتغير في أي حساب، ستكون النتيجة هي نفسها سواء كان المتغير موجبًا أو سالبًا. العيب هو أن وجود شكلين من نفس القيمة يتطلب إجراء مقارنتين عند التحقق من المساواة مع الصفر. يمكن أن يؤدي طرح المتمم الأحادي أيضًا إلى استلاف حول النهاية (كما هو موضح أدناه). يمكن القول أن هذا يجعل منطق الجمع والطرح أكثر تعقيدًا في بعض الأحيان أو يجعله أبسط، حيث يتطلب الطرح ببساطة عكس بتات المتغير الثاني أثناء تمريره إلى عملية الجمع. تستخدم أجهزة الكمبيوتر PDP-1 وسلسلة CDC 160 وسلسلة CDC 3000 وسلسلة CDC 6000 وسلسلة UNIVAC 1100 وLINC تمثيل المتمم الأحادي.

يعد المتمم الثنائي هو الأسهل في التنفيذ في الأجهزة، والذي قد يكون السبب الرئيسي وراء شعبيته الواسعة.  غالبًا ما كانت المعالجات الموجودة في أجهزة الكمبيوتر الرئيسية المبكرة تتكون من آلاف الترانزستورات، لذا فإن التخلص من عدد كبير من الترانزستورات كان بمثابة توفير كبير في التكلفة. تستخدم أجهزة الكمبيوتر المركزية مثل IBM System/360 وسلسلة GE-600 ،  و PDP-6 و PDP-10 المتمم الثنائي، كما فعلت أجهزة الكمبيوتر الصغيرة مثل PDP-5 و PDP-8 و PDP-11 وأجهزة VAX . كما اختار مهندسو وحدات المعالجة المركزية المبكرة المبنية على الدوائر المتكاملة ( Intel 8080 ، وما إلى ذلك) استخدام رياضيات المتمم الثنائي. مع تقدم تكنولوجيا IC، تم اعتماد تكنولوجيا المكمل الثنائي في جميع المعالجات تقريبًا، بما في ذلك x86 ،  m68k ، Power ISA ،  MIPS ، SPARC ، ARM ، Itanium ، PA-RISC ، و DEC Alpha .

## الإشارة-المقدار

في تمثيل **الإشارة-المقدار** ، والذي يُسمى أيضًا **الإشارة والقدر** أو **القدر المؤشر** ، يتم تمثيل الرقم المؤشر من خلال البت العاكس لإشارة الرقم (بت الإشارة) (غالبًا البت الأكثر أهمية ، والذي قيمته 0 للرقم الموجب و 1 للرقم السالب)، و مقدار الرقم (أو القيمة المطلقة) للبتات المتبقية. على سبيل المثال، في بايت مكون من ثمانية بتات، تمثل سبعة بتات فقط المقدار، والذي يمكن أن يتراوح من 0000000 (0) إلى 1111111 (127). وبالتالي، يمكن تمثيل الأرقام التي تتراوح من (−127)10 إلى (+127)10 بمجرد إضافة بت الإشارة (البت الثامن). على سبيل المثال، (−43)10 ممثلا في بايت مكون من ثمانية بتات هو **1**0101011 بينما (43)10 هو **0**0101011. إن استخدام تمثيل الإشارة والحجم له عواقب متعددة مما يجعل تنفيذه أكثر تعقيدًا فعلى سبيل المثال: 

# هناك طريقتان لتمثيل الصفر، 00000000 (0) و10000000 ( −0 ).
# تتطلب عملية الجمع والطرح سلوكًا مختلفًا اعتمادًا على بت الإشارة، في حين أن المتمم الأحادي يمكن أن يتجاهل بت الإشارة ويقوم فقط بالحمل ما بعد النهائي، ويمكن أن يتجاهل المتمم الثنائي بت الإشارة ويعتمد على سلوك الطفح Overflow.
# تتطلب المقارنة أيضًا فحص بت الإشارة، بينما في المتمم الثنائي، يمكننا ببساطة طرح الرقمين، والتحقق مما إذا كانت النتيجة موجبة أم سالبة.
# أقل عدد سالب هو −127، بدلاً من −128 كما هي الحالة في المتمم الثنائي.

يمكن مقارنة هذا النهج بشكل مباشر بالطريقة الشائعة لإظهار الاشارة (وضع "+" أو "-" بجوار حجم الرقم). تستخدم بعض أجهزة الكمبيوتر الثنائية المبكرة (على سبيل المثال، IBM 7090 ) هذا التمثيل، ربما بسبب علاقته الطبيعية بالاستخدام الشائع. تعتبر الإشارة-المقدار الطريقة الأكثر شيوعًا لتمثيل الدلالة Significand في القيم ذات الفاصلة العائمة Floating-point values .

## المتمم الأحادي

في تمثيل *المتمم الأحادي*،  يتم تمثيل رقم سالب بواسطة النمط NOT (أي "العكس" او "المكمل") للرقم الموجب. مثل تمثيل الإشارة والمقدار، فإن المتمم أو المكمل الأحادي فيه تمثيلان للصفر: 00000000 (+0) و11111111 ( −0 ). 

على سبيل المثال، يصبح شكل المتمم الأحادي لـ 00101011 (4310 ) هو 11010100 (−43 10 ). يتم تمثيل نطاق الأرقام المؤشرة باستخدام المتمم الأحادي من  إلى  و±0. البايت التقليدي المكون من ثمانية بتات هو −127 10 إلى +127 10 حيث يكون الصفر إما 00000000 (+0) أو 11111111 (−0).

لإضافة رقمين ممثلين في هذا النظام، يجب إجراء عملية جمع ثنائية تقليدية، ولكن من الضروري بعد ذلك إجراء *عملية حمل حول النهاية*: أي إضافة أي عملية حمل Carry flag ناتجة عن الجمع إلى المجموع الناتج مجددا.  ولكي نرى لماذا هذا ضروري، فكر في المثال التالي الذي يوضح حالة إضافة −1 (1111110) إلى +2 (00000010):
  ثنائي       عشري
   11111110   −1
 + 00000010   +2
 ───────────   ──
   00000000    0  ← لا زال الجواب خاطئا
   00000001   +1  ← أضف الحمل
 ───────────   ──
   00000001   1  ← الجواب الصحيح
في المثال السابق، يعطي الجمع الثنائي الأول 00000000، وهو غير صحيح. تظهر النتيجة الصحيحة (00000001) فقط عند إضافة الحمل مرة أخرى.

ملاحظة حول المصطلحات: يشار إلى النظام باسم "متمم الواحد" لأن نفي القيمة الإيجابية x (الممثلة على أنها NOT ثنائية البت لـ x ) يمكن أيضًا تشكيله عن طريق طرح x من تمثيل متمم الواحد للعدد صفر وهو عبارة عن سلسلة طويلة من الواحدات (−0). من ناحية أخرى، يشكل حساب المتمم للاثنين نفي x عن طريق طرح x من قوة واحدة كبيرة للاثنين تطابق +0.  لذلك، فإن تمثيل المتمم للواحد والمتمم للاثنين لنفس القيمة السالبة سوف يختلف بمقدار واحد.

لاحظ أنه يمكن الحصول على تمثيل المتمم الأحادي لرقم سالب من تمثيل الإشارة-المقدار فقط عن طريق استكمال المقدار بشكل بتي Bitwise complementing (عكس جميع البتات بعد الأول). على سبيل المثال، يمكن تمثيل العدد العشري −125 ذو تمثيل الإشارة-مقدار 11111101 في شكل المتمم للواحد على النحو: 10000010.

## المتمم الثنائي

في تمثيل *المتمم الثنائي او للاثنين*، يتم تمثيل الرقم السالب بواسطة نمط NOT على مستوى البت (أي "العكس" او "المكمل") للرقم الموجب ثم اضافة واحد، أي هو المتمم الأحادي زائد واحد. إنه يتغلب على مشاكل التمثيلات المتعددة للرقم 0 والحاجة إلى الحمل النهائي في المتمم الأحادي. يمكن أيضًا التفكير بالأمر على أن البت الأكثر أهمية يمثل هنا معكوس قيمته في عدد صحيح غير مؤشر؛ ففي بايت غير مؤشر مكون من 8 بتات، يمثل البت الأكثر أهمية المكان ذي القيمة 128، بينما يمثل هذا البت في المتمم الثنائي -128.

في المتمم الثنائي، يوجد قيمة صفرية واحدة فقط، يتم تمثيلها بـ 00000000. يتم عكس اشارة رقم (سواء كان سالبا او موجبا) عن طريق عكس جميع البتات ثم إضافة واحد إلى تلك النتيجة.  هذا الأمر في الحقيقة يوضح البنية الحلقية في جميع الأعداد الصحيحة modulo 2 <sup>''N''</sup> : \mathbb{Z}/2^N\mathbb{Z} . ناتج جمع زوج من الأعداد الصحيحة المتممة للاثنين هو نفس ناتج جمع زوج من الأعداد غير المؤشرة (باستثناء حالة الفائض Overflow إذا حدث ذلك)؛ وينطبق الشيء نفسه على الطرح وايضا أقل *N* بت من ناحية الأهمية من ناتج الضرب. على سبيل المثال، فإن إضافة المتمم الثنائي لـ 127 و -128 تعطي نفس نمط البت الذي تعطيه إضافة غير مؤشرة لـ 127 و 128، كما يمكن رؤيته من الجدول السابق للمتمم الثنائي لرقم مكون من 8 بتات.

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

طريقة ثانية:

# قم بعكس جميع البتات في العدد فيؤدي ذلك للحصول على نفس النتيجة التي نحصل عليها لو طرحنا العدد من الواحد السالب.
# أضف واحدا

مثال: بالنسبة لـ +2، وهو 00000010 في النظام الثنائي (الحرف ~ هو عامل NOT بت C ، لذا فإن ~X يعني "عكس جميع البتات في X"):

# ~00000010 → 11111101
# 11111101 + 1 → 11111110 (−2 في مكمل اثنين)

## الإزاحة الثنائية

في التمثيل *الثنائي الإزاحي* ، والذي يسمى أيضًا *<var>K</var> الزائد* أو *المتحيز* ، يتم تمثيل الرقم المؤشر بواسطة نمط البتات المقابل للرقم غير المؤشر ثم إضافة K ، حيث تكون K هي *قيمة* *الإزاحة*. وبالتالي، يتم تمثيل 0 بواسطة K ، ويتم تمثيل −K بواسطة نمط بتات صفري.

يمكن اعتبار هذا بمثابة تعديل طفيف وتعميم للمتمم الثنائي المذكور أعلاه، والذي هو في الواقع التمثيل  اي أن القيمة فائضة بازاحة  و هي التي تمثل البت الأكثر أهمية المنفي (معكوس الاشارة).

تُستخدم التمثيلات المتحيزة حاليا بشكل أساسي من أجل قوى الأعداد العشرية العائمة . يعرّف معيار IEEE 754 للفاصلة العائمة حقل الأس لرقم ذي دقة واحدة (32 بت) كحقل ثماني البت ذي قيمة 127 فائضة. و حقل الأس ذو الدقة المزدوجة (64 بت) هو حقل ذو 11 بت و له قيمة 1023 فائضة؛ راجع تحيز الأس لمعرفة المزيد . كان له أيضًا استخدام للأرقام العشرية المشفرة ثنائيًا مثل الفائض 3 .

## الأساس <span lang="ar" dir="ltr">-2</span>

في التمثيل *ذو الأساس−2* ، يتم تمثيل الرقم المؤشر باستخدام نظام عد ذو أساس −2. في أنظمة العد الثنائية التقليدية، الأساس أو الرقم الأساسي هو 2؛ وبالتالي فإن البت الأيمن يمثل 20 ، والبت التالي يمثل 21 ، والبت التالي 22 ، وهكذا. ونظام الأعداد الثنائية ذو القاعدة −2 ممكن أيضًا. يمثل البت الأيمن  ، ويمثل البت التالي  ، ويمثل البت التالي  وهكذا، مع الإشارة المتبدلة كل مرة. الأرقام التي يمكن تمثيلها بأربعة بتات موضحة في جدول المقارنة أدناه.

إن نطاق الأرقام التي يمكن تمثيلها بأساس 2- غير متناظر،فإذا كان العدد يحوي على عدد زوجي من البتات، فإن أكبر مقدار لعدد سالب يمكن تمثيله يكون ضعف أكبر مقدار لعدد موجب يمكن تمثيله، والعكس صحيح إذا كان العدد يحوي على عدد فردي من البتات.

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

نفس الجدول، كما يُرى من وجهة "بدءا من هذه البتات الثنائية، ما هو الرقم الذي نحصل عليه بالتفسيرات المختلفة":

## أنظمة أخرى
"الترميز المتعرج" في بروتوكولات التخزين المؤقت الخاصة بشركة Google هو نظام مشابه لنظام الإشارة-مقدار، ولكنه يستخدم البت الأقل أهمية لتمثيل الإشارة ولديه تمثيل واحد للصفر. يتيح هذا الأمر أن يتم استخدام ترميز الكميات ذات الطول المتغير Variable-length quantity المخصص للأعداد الصحيحة غير السالبة (و غير المؤشرة) بكفاءة للأعداد الصحيحة المؤشرة. 

يتم استخدام طريقة مشابهة في معايير ضغط الفيديو Advanced Video Coding/H.264 وHigh Efficiency Video Coding/H.265 لتوسيع تشفير Goloomb الأسي Exponential-Golomb coding إلى أرقام سالبة. في هذا الامتداد، البت الأقل أهمية هو بت إشارة تقريبًا؛ والصفر له قيمة البت الأقل أهمية (0) نفسها التي تتمتع بها الأرقام السالبة. يؤدي هذا الاختيار إلى أن يكون مقدار أكبر رقم موجب قابل للتمثيل أكبر بمقدار واحد من أكبر مقدار لرقم سالب، على عكس ما يحدث في المتمم الثنائي أو التشفير المتعرج لبروتوكولات التخزين المؤقت.

هناك نهج آخر يتمثل في إعطاء كل منزلة إشارة، مما يؤدي إلى تمثيل المنازل المؤشرة . على سبيل المثال، في عام 1726، دعا جون كولسون إلى تقليص التعبيرات إلى "أعداد صغيرة"، الأرقام 1، 2، 3، 4، و5. وفي عام 1840، أعرب أوغستين كوشي أيضًا عن تفضيله لمثل هذه الأرقام العشرية المعدلة لتقليل الأخطاء في الحساب.

## انظر أيضا

* ثلاثي متوازن
* عدد عشري مشفر ثنائيًا
* تنسيق أرقام الكمبيوتر
* طريقة المكملات
* التأشيرية

## المراجع

* إيفان فلوريس، *منطق الحساب الحاسوبي* ، برنتيس هول (1963)
* إسرائيل كورين، *خوارزميات الحساب الحاسوبي* ، أ.ك. بيترز (2002)،

تصنيف:حسابيات حاسوبية