ما هي حاسبة المتمم الثنائي؟
المتمم الثنائي (Two's Complement) هو الطريقة القياسية التي تمثّل بها الحواسيب الأعداد الصحيحة ذات الإشارة ضمن عدد ثابت من البِتات. تأخذ هذه الحاسبة عددًا عشريًا وعرض السجلّ بـعدد البِتات (n)، ثم تُظهر كيف تُخزَّن تلك القيمة كنمط بِتات بالمتمم الثنائي، وما القيمة غير ذات الإشارة التي تمثّلها هذه البِتات، وكيف تُفسَّر البِتات كعدد ذي إشارة. وهي تعمل مع المدخلات الموجبة والسالبة على حدٍّ سواء.
كيفية الاستخدام
أدخِل القيمة العشرية التي تريد ترميزها وعدد البِتات (الشائع 8 أو 16 أو 32). تقوم الحاسبة بلَفّ القيمة داخل السجلّ ذي الـ \(n\) بِت باستخدام حساب الباقي (modulo)، ثم تعرض التمثيل الثنائي وتفكّ التفسير ذا الإشارة. أما المدخلات السالبة فتُخزَّن تلقائيًا بصيغة المتمم الثنائي الخاصة بها.
شرح المعادلة
لتخزين قيمة \(x\) في \(n\) من البِتات، احسب النمط المخزَّن (غير ذي الإشارة) كالتالي: $$\text{stored} = \big((x \bmod 2^{n}) + 2^{n}\big) \bmod 2^{n}$$ أما المتمم الثنائي (النفي) لقيمة مخزَّنة فهو $$\text{twos} = (2^{n} - \text{stored}) \bmod 2^{n}$$ ولفكّ المعنى ذي الإشارة لنمط مكوَّن من \(n\) بِت: إذا كان النمط لا يقل عن \(2^{n-1}\) فإن القيمة تساوي \(\text{pattern} - 2^{n}\) (سالبة)، وإلا فهي النمط نفسه.
مثال محلول
لنرمّز العدد \(-5\) في 8 بِتات. هنا \(2^8 = 256\)، إذًا $$\text{stored} = \big((-5 \bmod 256) + 256\big) \bmod 256 = 251$$ وبالنظام الثنائي \(251 = 11111011\). ولفكّ \(251\): بما أن \(251 \ge 2^7\) (128)، فإن القيمة ذات الإشارة تساوي \(251 - 256 = -5\). أما المتمم الثنائي للعدد \(251\) فهو \((256 - 251) \bmod 256 = 5\)، وهو مطابق للمقدار.
الأسئلة الشائعة
لماذا تظهر الأعداد السالبة على هيئة أنماط ثنائية كبيرة؟ لأن البِتات الأولى تكون آحادًا (1)؛ ففي الحساب ذي الإشارة بعدد \(n\) بِت، يدلّ البِت الأول إذا كان 1 على أن العدد سالب، لذا فإن \(11111011\) هي \(-5\) وليست 251.
ما المدى الذي يتسع له \(n\) من البِتات؟ تمتد القيم ذات الإشارة من \(-2^{n-1}\) إلى \(2^{n-1} - 1\). ففي حالة 8 بِتات يكون المدى من \(-128\) إلى \(127\).
ماذا لو كان عددي أكبر من اللازم؟ تلتفّ القيم الخارجة عن سعة السجلّ (overflow) عبر عملية الباقي (modulo)، تمامًا كما يحدث في العتاد الفعلي.