تمثيل الأعداد ذات الإشارة في الحاسوب
1. المقدمة
في الأنظمة الرقمية، يتم تمثيل جميع البيانات (بما في ذلك الأعداد) باستخدام النظام الثنائي (0 و1). تمثيل الأعداد السالبة يتطلب طرقاً خاصة بسبب محدودية مساحة التخزين وطبيعة الدوائر الرقمية. سنستعرض في هذا الدليل ثلاث طرق رئيسية مع تحليل مفصل لكل منها.
2. طرق التمثيل الأساسية
2.1. تمثيل الإشارة والقيمة (Sign-Magnitude)
المبدأ التقني:
- البت الأكثر أهمية (MSB) يمثل الإشارة (0 موجب، 1 سالب)
- البتات المتبقية تمثل القيمة المطلقة
الخصائص:
- نطاق تمثيل 8 بت: -127 إلى +127
- يوجد تمثيلان للصفر: +0 (00000000) و -0 (10000000)
- يتطلب دوائر إلكترونية معقدة للمقارنة والعمليات الحسابية
أمثلة عملية:
- +18 → 00010010 (بت الإشارة 0)
- -18 → 10010010 (بت الإشارة 1)
مشاكل التطبيق:
- تعقيد تنفيذ الوحدة الحسابية المنطقية (ALU)
- صعوبة في اكتشاف الأخطاء عند حدوث overflow
- عدم كفاءة في استخدام مساحة التخزين
2.2. تمثيل المتمم الأحادي (1's Complement)
المبدأ التقني:
- الأعداد الموجبة: تبقى كما هي
- الأعداد السالبة: يتم عكس جميع بتات العدد الموجب (NOT operation)
الخصائص:
- نطاق تمثيل 8 بت: -127 إلى +127
- لا يزال يوجد مشكلة الصفر المزدوج:
- +0 → 00000000
- -0 → 11111111
- أسهل في التطبيق من Sign-Magnitude ولكن ليس الأمثل
أمثلة عملية:
- +25 → 00011001
- -25 → 11100110 (تم عكس جميع بتات +25)
تحليل الأداء:
- يتطلب خطوة إضافية (end-around carry) في العمليات الحسابية
- أقل كفاءة من ناحية استهلاك الطاقة في الدوائر الإلكترونية
2.3. تمثيل المتمم الثنائي (2's Complement) - المعيار الذهبي
المبدأ التقني:
- الأعداد الموجبة: تبقى كما هي
- الأعداد السالبة:
- عكس جميع بتات العدد الموجب (1's complement)
- إضافة 1 إلى النتيجة
الخصائص الفنية:
- نطاق تمثيل 8 بت: -128 إلى +127
- لا يوجد صفر مزدوج
- يتوافق تماماً مع تصميم الدوائر الرقمية الحديثة
- تبسيط كبير للعمليات الحسابية
أمثلة عملية:
تمثيل -20 بطريقة 2's complement (8 بت):
- تمثيل +20: 00010100
- عكس البتات: 11101011 (1's complement)
- إضافة 1: 11101011 + 1 = 11101100
مزايا التصميم:
- دائرة جمع واحدة تكفي لجميع العمليات الحسابية
- لا حاجة لمعالجة خاصة للبت الإشارة
- كفاءة عالية في استهلاك الطاقة
3. التمثيل العملي في المعالجات
3.1. تحليل بنية المسجلات (Registers)
في معالجات x86 الحديثة:
- تستخدم 2's complement لجميع العمليات الصحيحة
- مسجلات 32 بت (EAX) تسمح بتمثيل من -2,147,483,648 إلى +2,147,483,647
- دعم مباشر في مجموعة التعليمات (Instruction Set)
مثال من لغة Assembly:
MOV EAX, -42 ; يتم تخزين -42 كـ 2's complement تلقائياً
3.2. الكشف عن الأعداد السالبة
خوارزمية سريعة:
- افحص البت الأكثر أهمية (MSB)
- إذا كان 1: العدد سالب (في 2's complement)
- إذا كان 0: العدد موجب
تنفيذ بلغة C:
int isNegative(int num) { return (num >> (sizeof(int)*8 - 1)) & 1; }
4. تمارين عملية متقدمة
التمرين 1: التحويل بين الأنظمة
مثل الأعداد التالية في 8 بت باستخدام 2's complement:
- +45
- -67
- -128
- +127
حل نموذجي:
- +45 → 00101101
- -67:
- +67 → 01000011
- عكس البتات → 10111100
- +1 → 10111101
- -128->10000000
- +127->01111111
التمرين 2: التعرف على القيمة
حدد القيمة العشرية لهذه التمثيلات (8 بت 2's complement):
- 11011011
- 01010101
- 10000000
طريقة الحل:
- إذا كان البت الأول 1:
- أخذ المتمم الثنائي (عكس البتات + 1)
- النتيجة هي القيمة السالبة
التمرين 3: تحليل النطاق
لماذا نطاق 8 بت في 2's complement هو -128 إلى +127 وليس -127 إلى +127؟
الإجابة التقنية:
- القيمة 10000000 تمثل -128 وليس -0
- هذا لأن إضافة 1 إلى 01111111 (+127) تعطي 10000000
- يستفيد من كل التركيبات الممكنة للبتات
الخلاصة:
فهم طرق تمثيل الأعداد ذات الإشارة في الحاسوب أمر ضروري لفهم كيفية عمل العمليات الحسابية وتنظيم البيانات. طريقة المتمم الثنائي هي الأكثر شيوعًا في الأنظمة الحديثة نظرًا لمزاياها العديدة. من خلال التدرب على الأمثلة والتمارين، يمكنك اكتساب فهم عميق لهذه المفاهيم.