العمليات الحسابية الثنائية والأعداد الصحيحة بإشارة
| English | العربية |
|---|---|
| overflow/ˌəʊvəˈfləʊ/ | الانحياز (overflow) |
| two's complement/tuːz ˈkɒmplɪmənt/ | تكميل اثنان |
| register/ˈredʒɪstə/ | مسجل |
| sign bit/saɪn bɪt/ | بت الإشارة |
| most significant bit/məʊst sɪɡˈnɪfɪkənt bɪt/ | أعلى بت أهمية |
| one's complement/wʌnz ˈkɒmplɪmənt/ | تكميل واحد |
| Binary Coded Decimal/ˈbaɪnəri ˈkəʊdɪd ˈdesɪml/ | الترميز العشري الثنائي |
البنك الذي خسر يوماً
- في 1 سبتمبر 1983 كان مؤشر بورصة فانكوفر عند 524.811. وقد انطلق من 1000 قبل عشرين شهراً، وكانت السوق قد ارتفعت طوال هذه الفترة.
- كان البرنامج يعيد حساب المؤشر بعد كل عملية تجارة، وقص الكسور بدلاً من تقريبها في كل مرة. لقد أكلت كل قص fraction من نقطة. وثلاثة آلاف عملية تجارة يومياً أنجزت الباقي.
- عندما أعيد حسابه بشكل صحيح أصبح المؤشر 1098.892: الحساب الرياضي هو من نصف قيمته وليس السوق.
- العمليات الحسابية على عدد ثابت من البتات ليست الحسابيات التي تعلمتها في المدرسة. هذه الدروس هي جمع ثنائي، الطوفان، والطرح بـالمكملة الثنائية، والأعداد الصحيحة الموقعة، والـ BCD.
الجمع الثنائي
- اجمع عموداً بعمود بدءاً من اليمين، مع نقل القيمة للموقع التالي، تماماً كما في النظام العشري.
- القواعد: $0 + 0 = 0$؛ $0 + 1 = 1$؛ $1 + 1 = 10$، اكتب 0 وانقل 1؛ $1 + 1 + 1 = 11$، اكتب 1 وانقل 1.
0101$+$0011$=$1000، أي $5 + 3 = 8$.

نفس طريقة النظام العشري، لكن رقمان فقط يتم نقلهما
ثنائيات والأعداد الصحيحة بإشارة
byte = مجموع قيم المواقع
شاهد كيف يترجم نمط 8 بت إلى رقم (وكيف يحدث تجاوز عند تجاوز 255).
اجمع الأرقام الثنائية 0101 + 0011. أعطِ النتيجة المكونة من 4 بتات.
$5 + 3 = 8$، وهو 1000 بالنظام الثنائي.
الطوفان
- الطوفان يحدث عندما يحتاج نتيجة العملية الحسابية إلى بتات أكثر مما يستطيع المسجل استيعابه. تُفقد القيمة المنقولة خارج العمود الأعلى أهمية، لذا تكون الإجابة المخزنة خاطئة.
- إنه خاصية لـعرض المسجل، وليس للرقم 255: في مسجل 16 بت يكون نفس المجموع مقبولاً.
- في الحساب الموقّع، علامة الخطر هي أن بت الإشارة ينعكس بشكل خاطئ: اثنان من الموجبات يعطيان سالباً، أو اثنان من السلب يعطيان موجباً.
التجاوز في الجمع الثنائي يعني:
يحدث التجاوز عندما يكون المجموع كبيراً جداً ليدخل في البتات المتاحة؛ يُفقَد الحمل الخارج من العمود الأيسر.
مثال محلول: سمّ الطوفان بشكل صحيح
- أضف الأعداد الصحيحة غير الموقعة ذات الـ 8 بت
10110101و01101100تعليقاً على النتيجة. - المجموع هو
1 0010 0001، والذي يحتاج 9 بت. النتيجة الحقيقية هي 289. - الإجابة الكاملة: حدث طوفان، لأن 289 أكبر من أكبر قيمة يمكن لمسجل 8 بت استيعابها، وهي 255؛ القيمة المنقولة خارج بت أعلى أهمية تُفقَد، لذا فإن النتيجة المخزنة
0010 0001هي 33، وهي خاطئة. - العلامة مخصصة لتسمية عرض المسجل وقول إن النتيجة لا يمكن تمثيلها فيه. قول "كانت الإجابة أكثر من 255" وحده لا يمنح الدرجة.
تم جمع عددين صحيحين غير سالبين بحجم 8 بت، والنتيجة تحتاج إلى 9 بتات. أي شرح يمنح الدرجة الكاملة؟
حدد عرض السجل، قل إن النتيجة لا يمكن تمثيلها فيه، وقل ماذا يحدث للحمل. الخيارات الأخرى تذكر عرضاً دون سبب.
الطرح بالمكملة الثنائية
- لحساب $A - B$: كوّن المكملة الثنائية لـ $B$ عن طريق عكس كل بت وإضافة 1، أضفها إلى $A$، ثم تجاهل أي نقل نهائي للخارج.
- $100 - 30$ بـ 8 بت: المكملة الثنائية لـ
0001 1110هي1110 0001معكوساً، زائد 1، أي1110 0010. 0110 0100$+$1110 0010$=$1 0100 0110؛ تجاهل الـ 1 الأول واقرأ0100 0110$= 70$. ✓

يصبح الطرح جمعاً، ولهذا السبب لا تحتاج المعالجات إلى وحدة طرح
ما هو مكمل اثنين المكون من 4 بتات للرقم 0011؟ (قلب البتات، ثم أضف 1)
قلب 0011 → 1100، ثم أضف 1 → 1101 (الذي يمثل $-3$).
رتّب خطوات طرح B من A باستخدام مكمل اثنين.
قلب، أضف واحد، أضف، تجاهل. التجاهل هو ما يبقي الإجابة ضمن عرض السجل.
أعداد صحيحة موقعة بالمكملة الثنائية
- في رقم موقّع بالمكملة الثنائية بعرض $n$ بت، بت أعلى أهمية هو بت الإشارة: 0 يعني موجباً، و1 يعني سالباً. وبشكل مكافئ، يحمل البت العلوي قيمة مكان سالبة، وهي $-2^{n-1}$.
- لقراءة عدد سالب: اعكس كل بت، أضف 1، ثم ضع إشارة سالب أمامه.
1011 0100ينعكس ليصبح0100 1011، زائد 1 هو0100 1100$= 76$، لذا القيمة هي $-76$. تحقق بقيمة المكان: $-128 + 32 + 16 + 4 = -76$. ✓ - لـ $n$ بت، النطاق هو $-2^{n-1}$ إلى $+2^{n-1} - 1$: 8 بت تعطي $-128$ إلى $+127$، و12 بت تعطي $-2048$ إلى $+2047$. أصغر قيمة سالبة هي 1 متبوعة بأصفار؛ أكبر قيمة موجبة هي 0 متبوعة بآحاد.

11111111 هي 255 إذا قرأتها بطريقة و-1 إذا قرأتها بطريقة أخرى
بتات إشارية بمكمل اثنين
الببت الأكثر أهمية يحمل قيمة مكانية سالبة. قلب أي بت — أو اضغط على Negate (قلب كل بت، ثم أضف 1) — وشاهد تغير القيمة الإشارية.
اقرأ الرقم الثنائي بإشارة مكمل اثنين المكون من 8 بتات 11111101 كقيمة عشرية إشارية.
الببت الأعلى (MSB) هو 1 (سلبي). قلب → 00000010، أضف 1 → 00000011 $= 3$، إذن القيمة هي $-3$.
ما هي أكبر قيمة موجبة يمكن أن تحملها رقم ثنائي بإشارة مكمل اثنين مكون من 8 بتات؟
النطاق هو $-2^{7}$ إلى $2^{7}-1$، أي $-128$ إلى $+127$. القيمة القصوى هي 01111111 = 127.
مثال محلول: اكتب -108 باستخدام 12 بت
- ابدأ بـ $+108$ بـ 12 بت: $108 = 64 + 32 + 8 + 4$، لذا
0000 0110 1100. - اعكس كل بت:
1111 1001 0011. أضف 1:1111 1001 0100. - تحقق باستخدام قيم الأماكن، حيث قيمة البت العلوي هي $-2048$: $-2048 + 1024 + 512 + 256 + 128 + 16 + 4 = -108$. ✓
- الخطأ الأكثر شيوعاً هو نظام الإشارة والمقدار: تعيين البت العلوي بـ 1 وترك الباقي. هذا نظام مختلف وأقدم ولا يمنح درجة هنا.
اكتب −108 كرقم ثنائي بإشارة مكمل اثنين مكون من 12 بتاً (المسافات مسموحة).
+108 هي 0000 0110 1100؛ قلبها لتصبح 1111 1001 0011 وأضف 1. تحقق: −2048 + 1024 + 512 + 256 + 128 + 16 + 4 = −108.
المكملة الواحدة
- المكملة الواحدة هي النظام القديم: يُصنع العدد السالب عن طريق عكس كل بت للعدد الموجب، دون خطوة إضافة 1. $+30$ هي
0001 1110، لذا $-30$ هي1110 0001. - عيبها هو وجود صفرين،
0000 0000و1111 1111، مما يهدر نمط بت ويُعرّق العمليات الحسابية. - المكملة الثنائية لها صفر واحد وتسمح لنفس دائرة الجمع بإجراء الطرح، ولهذا السبب فازت.
مكمل واحد مفضل على مكمل اثنين لأنه يمتلك تمثيلاً واحداً للصفر.
العكس: مكمل واحد يمتلك صفرين، +0 و −0. مكمل اثنين يمتلك واحداً، ويُمكّن جمّاع العمليات من إجراء الطرح.
الرقم العشري المُشفّر ثنائياً
- في الرقم العشري المُشفّر ثنائياً (BCD)، يُخزن كل رقم عشري كنمط 4 بت خاص به، باستخدام
0000إلى1001فقط. - 93 في BCD هو
1001 0011، وهو ليس نفسه 93 في النظام الثنائي الخالص،0101 1101. قراءة أحدهما على أنه الآخر فخاخ امتحانات شائعة. - الاستخدامات: الآلات الحاسبة، والساعات الرقمية والشاشات السباعية القطعة، حيث يُدفع كل رقم بشكل منفصل، والعملات، حيث يتجنب BCD أخطاء التقريب الناتجة عن تخزين $0.1$ في النظام الثنائي الخالص. التكلفة هي هدر الأنماط، لأن
1010إلى1111لن تُستخدم أبداً.

رقم واحد، نيبل واحد، عرض واحد
اكتب الرمز العشري $9$ كنمط BCD مكون من 4 بتات.
$9$ هي 1001. في BCD يحصل كل رمز عشري على نيببل خاص به (0000–1001).
طابق كل نمط بت بما يمثله.
لا شيء في البتات يقول كيفية قراءتها. التمثيل المتفق عليه يحدد القيمة.
علامات ضائعة
- اشرح الطوفان (overflow) باستخدام عرض المسجل الذي قدمته السؤال، لا بـ "أنه كان أكثر من 255".
- للنفي، عك البتات وأضف 1. تعيين البت الأعلى بـ 1 هو نظام الإشارة والحجم، وهو مخطط مختلف.
- طرح المكمل الثنائي ينتهي بـ التخلص من نقل الحمل الأخير. إبقاؤه يعطي إجابة من تسعة بتات.
- BCD يخزن كل رقم بشكل منفصل؛ بينما يخزن Binary النقي العدد كاملاً.
1001 0011يساوي 93 في BCD و 147 في Binary.
لقد فهمت الأمر
- أضف عموداً تلو الآخر مع النقلات؛ الطوفان هو نتيجة تتطلب عدد بتات أكبر مما يستوعبه المسجل، والإجابة تحدد هذا العرض
- اطرح بإضافة المكمل الثنائي، عك البتات وأضف 1، ثم تخلص من نقل الحمل الأخير
- للأعداد ذات الإشارة: البت الأعلى (MSB) هو بت الإشارة ويحمل $-2^{n-1}$؛ النطاق من $-2^{n-1}$ إلى $+2^{n-1}-1$؛ اقرأ السالب بعك البتات وإضافة 1 ونفي النتيجة
- مكمل الأحاد يعكس فقط وله صفرين؛ BCD يخزن كل رقم عشري في نيببل خاص به، للساعات والآلات الحاسبة والعملات