طريقة الاستخدام
- اكتب العدد في العدد أو البتات. وإن كانت بتات، فاختر السداسي عشري أو الثنائي تحت الكتابة بصيغة.
- اختر العرض: عدد البتات التي يخزّنها الحاسوب، أي 8 أو 16 أو 32 أو 64.
- اقرأ بتات المكمل الثنائي للنمط المخزّن، والصيغ المقارنة للنظامين الآخرين.
- إذا قال الفحص إن العدد لا يتسع، فالبتات المعروضة هي ما كان الحاسوب سيخزّنه بدلاً منه.
كيف يُخزَّن العدد السالب
يخزّن الحاسوب العدد الصحيح الموقّع في عدد ثابت من البتات. وفي المكمل الثنائي يمثل البت الأعلى القيمة −2^(n−1)، وتُجمع البتات الأخرى كالمعتاد. لكتابة −5 بثمانية بتات، اكتب 5 هكذا 00000101، واقلب كل بت، ثم أضف 1: 11111010 + 1 = 11111011.
−5 → 00000101 → 11111010 → 11111011 (FB بالسداسي عشري)
المكمل الأحادي والقيمة المطلقة مع الإشارة
- المكمل الأحادي يقلب كل بت من المقدار: −5 هو 11111010.
- القيمة المطلقة مع الإشارة تُبقي المقدار، وتجعل البت الأعلى إشارة: −5 هو 10000101.
- لكل منهما صفران. كل الآحاد في المكمل الأحادي، وبت الإشارة وحده في القيمة المطلقة مع الإشارة، هما −0.
- للمكمل الثنائي صفر واحد، وقيمة سالبة أكثر من القيم الموجبة. وهو النظام الذي تستخدمه أغلب المعالجات للأعداد الصحيحة.
المدى والفيض
مع n بت يكون مدى المكمل الثنائي من −2^(n−1) إلى 2^(n−1) − 1: من −128 إلى 127 لثمانية بتات، ومن −2,147,483,648 إلى 2,147,483,647 لـ32 بت. والقيمة خارج المدى تلتف: العدد 200 يحتاج ثمانية بتات ويُقرأ −56، لأن 11001000 هو −56 في المكمل الثنائي.
ما لا تشمله الأداة
- الحساب: تعرض الأداة كيفية تخزين العدد، لا نتيجة جمع عددين أو ضربهما.
- الكسور العشرية والأعداد ذات الفاصلة العائمة لها صيغتها الخاصة، انظر محوّل IEEE 754.
- اللغات التي ترفع خطأ عند الفيض بدلاً من الالتفاف. تعرض الأداة نتيجة الالتفاف، وتبيّنها بعلامة.
مثال محلول: −5 بثمانية بتات
اكتب −5 مع الكتابة بصيغة على عشري، والعرض على 8 بتات. نمط المكمل الثنائي هو 11111011، وهو FB بالسداسي عشري، و251 عدداً غير موقّع.
والعدد −5 نفسه في النظامين الآخرين: المكمل الأحادي هو 11111010، والقيمة المطلقة مع الإشارة هي 10000101.
| النظام | البتات | السداسي | القيمة |
|---|---|---|---|
| المكمل الثنائي | 1111 1011 | FB | -5 |
| المكمل الأحادي | 1111 1010 | FA | -5 |
| القيمة المطلقة مع الإشارة | 1000 0101 | 85 | -5 |
| غير موقّع | 1111 1011 | FB | 251 |
الأسئلة الشائعة
لماذا تستخدم الحواسيب المكمل الثنائي بدلاً من علامة الطرح؟
كانت علامة الطرح ستحتاج قاعدة خاصة بها في كل دائرة جمع. في المكمل الثنائي يعمل الجمع والطرح بالطريقة نفسها للأعداد السالبة والموجبة، ويوجد صفر واحد فقط.
لماذا يكون المدى السالب أكبر من الموجب بقيمة واحدة؟
يأخذ الصفر أحد أنماط 2^n، فتمتد القيم الموجبة من 1 إلى 2^(n−1) − 1، وتنزل القيم السالبة إلى −2^(n−1). وفي 8 بتات القيمة الزائدة هي −128، ولا شريك موجب لها.
ماذا يعني الفيض في هذه الصفحة؟
يحتاج العدد إلى بتات أكثر مما يتسع له العرض. تعرض الصفحة البتات التي كان العرض سيحملها، وسطر الفحص يقول إن القيمة لا تتسع. مثلاً 128 في 8 بتات تحمل 10000000، وهي تُقرأ −128.
لماذا تستخدم الأداة أعداداً صحيحة دقيقة لـ64 بت؟
لا يكون العدد في JavaScript دقيقاً إلا حتى 2^53، وقيم 64 بت تمتد إلى 2^64. لذلك تستخدم الصفحة BigInt، فتُحفظ كل البتات، ويظهر الحد −9,223,372,036,854,775,808 بدقة.
هل تستخدم Java المكمل الثنائي لأعدادها الصحيحة؟
نعم. تعرّف مواصفة لغة Java أنواعها الصحيحة بالمكمل الثنائي، فالـint هو 32 بت من المكمل الثنائي، والـlong هو 64 بت منه.
المصادر
آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.