الإشارة العددية

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

نظرًا لأن الأعداد ذات الإشارة يمكنها تمثيل الأعداد السالبة، فإنها تفقد جزءًا من نطاق الأعداد الموجبة الذي يمكن تمثيله فقط باستخدام الأعداد بدون إشارة من نفس الحجم (بوحدة البِت)، إذ يُخصص نحو نصف القيم الممكنة للأعداد غير الموجبة، بينما يمكن لنوع البيانات بدون إشارة تخصيص جميع القيم الممكنة لتمثيل الأعداد الموجبة.

فعلى سبيل المثال، يمكن لعدد صحيح 16-بت باستخدام تمثيل “متمم الاثنين” ( المتمم الثنائي) أن يُخزِّن القيم من −32768 إلى 32767 شاملة، بينما يمكن لعدد صحيح 16-بت بدون إشارة أن يُخزِّن القيم من 0 إلى 65535. في هذا النوع من التمثيل، تشير البتة اليسرى (الأكثر أهمية) إلى ما إذا كانت القيمة سالبة (1 للسالب، 0 للموجب أو الصفر).[1][2][3]

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

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

في لغة البرمجة C ومشتقاتها، يتم تطبيق خاصية التوقيع (الإشارة العددية) على جميع أنواع البيانات الصحيحة، بما في ذلك نوع “الحرف” (شخصية). بالنسبة للأعداد الصحيحة، يُستخدم المُعدِّل بدون إشارة لتحديد النوع كنوع غير موقع. وبشكل افتراضي، تكون الأنواع الصحيحة موقعة ما لم يُذكر خلاف ذلك، ولكن يمكن تحديد التوقيع صراحةً باستخدام المُعدِّل موقع.

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

يمكن جعل الثوابت العددية من النوع غير الموقع عن طريق استخدام اللاحقة U.

وغالبًا ما تصدر المترجمات تحذيرات عند إجراء مقارنات بين أعداد موقعة وغير موقعة، أو عند تحويل أحدهما إلى الآخر، نظرًا لاحتمالية حدوث سلوك غير متوقع بسبب اختلاف نطاق القيم بين النوعين.[6][7]

نطاقات القيم لأنواع البيانات الرقمية
عدد البتاتالنوعالحد الأدنىالحد الأقصى
8موقّع−128127
16موقّع−32٬76832٬767
32موقّع−2٬147٬483٬6482٬147٬483٬647
64موقّع−9٬223٬372٬036٬854٬775٬8089٬223٬372٬036٬854٬775٬807
128موقّع−170٬141٬183٬460٬469٬231٬731٬687٬303٬715٬884٬105٬728170٬141٬183٬460٬469٬231٬731٬687٬303٬715٬884٬105٬727
8غير موقّع0255
16غير موقّع065٬535
32غير موقّع04٬294٬967٬295
64غير موقّع018٬446٬744٬073٬709٬551٬615
128غير موقّع0340٬282٬366٬920٬938٬463٬463٬374٬607٬431٬768٬211٬455

مراجع

  1. "Signed and Unsigned Integers". www.ibm.com (بالإنجليزية الأمريكية). Retrieved 2025-05-13.
  2. "What Does Unsigned Mean in Computer Programming?". ThoughtCo (بالإنجليزية). Retrieved 2025-05-13.
  3. "Why is the range of signed byte is from -128 to 127 (2's complement) and not from -127 to 127?". Stack Overflow (بالإنجليزية). Retrieved 2025-05-13.
  4. "Signed and Unsigned Integers". www.ibm.com (بالإنجليزية الأمريكية). Retrieved 2025-05-13.
  5. "Difference Between Unsigned Int and Signed Int in C". GeeksforGeeks (بالإنجليزية الأمريكية). 6 Oct 2022. Retrieved 2025-05-13.
  6. "ISO/IEC 9899:2018". ISO (بالإنجليزية). Retrieved 2025-05-13.
  7. TylerMSFT. "Data Type Ranges". learn.microsoft.com (بالإنجليزية الأمريكية). Retrieved 2025-05-13.