ما هي حاسبة المتمم الثنائي؟
المتمم الثنائي (Two's Complement) هو الطريقة القياسية التي تخزّن بها الحواسيب الأعداد الصحيحة ذات الإشارة. تحوّل هذه الحاسبة أي عدد عشري إلى تمثيله بالمتمم الثنائي لعدد محدّد من البتات (4 أو 8 أو 16 أو 32 بت)، وتعرض لك القيمة بدون إشارة (unsigned) للنمط البتّي، إضافةً إلى القيمة بإشارة (signed) التي تمثّلها هذه البتات.
كيفية الاستخدام
أدخل عددًا عشريًا — موجبًا كان أم سالبًا — ثم اختر عدد البتات. تقوم الأداة بحساب باقي العدد بالنسبة إلى \(2^{n}\)، فتنتج النمط البتّي ذاته الذي يخزّنه المعالج تمامًا. كما تخبرك بالقيمة ذات الإشارة التي يفكّ إليها هذا النمط نفسه، حتى تتمكن من التحقق من صحة التحويل ذهابًا وإيابًا.
شرح المعادلة
لحقل مكوّن من n من البتات، يُحسب التمثيل بدون إشارة بالعلاقة $$u = ((x \bmod 2^n) + 2^n) \bmod 2^n$$ وهذا يلفّ الأعداد السالبة حول الحقل: فعند 8 بتات يصبح -5 مساويًا \(256 - 5 = 251\)، وتمثيله الثنائي هو 11111011. ولفكّ النمط إلى قيمة بإشارة، تحقّق من البت الأكثر دلالة (MSB): إذا كان يساوي 1 (أي \(u \geq 2^{n-1}\))، فإن القيمة هي \(u - 2^n\)؛ وإلا فهي ببساطة \(u\). وهناك طريقة مكافئة للنفي تتمثّل في عكس جميع البتات ثم إضافة واحد: \(\sim x + 1\).
مثال محلول
لنحوّل −5 إلى متمم ثنائي بطول 8 بتات. الخطوة 1: \(2^{8} = 256\). الخطوة 2: $$u = ((-5 \bmod 256) + 256) \bmod 256 = 251$$ الخطوة 3: العدد 251 بالنظام الثنائي هو 11111011. وبما أن البت الأكثر دلالة يساوي 1، فإن القيمة بإشارة هي \(251 - 256 = -5\)، وهو ما يؤكّد صحة التحويل.
الأسئلة الشائعة
ماذا يحدث إذا كان العدد أكبر من سعة عدد البتات؟ يحدث له لفّ (فيض/overflow) بأخذ الباقي بالنسبة إلى \(2^{n}\)، تمامًا كما يفعل العتاد. على سبيل المثال يصبح العدد 300 عند 8 بتات مساويًا \(300 - 256 = 44\).
لماذا تختلف القيمة بدون إشارة عن القيمة بإشارة؟ يمكن قراءة البتات نفسها بطريقتين: القراءة بدون إشارة تعتبر جميع البتات موجبة، أما القراءة بإشارة فتعامل البت الأعلى على أنه وزن سالب.
هل تدعم الأداة 64 بت؟ تدعم هذه الأداة الأطوال الشائعة حتى 32 بت، وذلك للحفاظ على النتائج ضمن حدود دقّة آمنة.