two's complement

ال two's complement هي طريقة نعبر بيها على الارقام السالبة بالbinary، والسبب اننا لو عايزين نطرح رقمين من بعض في الدوائر الكهربية او البروسيسور، الاسهل اننا نعاملهم على اساس الجمع، يعني نجمع القيمة السالبة للرقم المطروح على الرقم الموجب، يعني:

(1-) + 2 = 2-1

لو نجحنا ننفذ الفكرة دي، هنوفر كتير اوي على البروسيسور وحجمة هيبقى اصغر... هشرح ال two's complement الاول وبعد كده هثبت ازاي الكلام ده اتحقق.

لو اخدنا نظام ال 3 bits، اي كمبيوتر عموما عنده حاجة اسمها ال registry اللي هي عدد الbits اللي الكمبيوتر بيتعامل معاها، انا هعتبر دلوقتي الregistry عبارة عن 3 bits بس وده رقم بسيط اوي، يعني الكمبيوتر يقدر يعبر بيهم عن الارقام من 0 ل 7، يعني 3^2 قيم مختلفة:
binary | decimal

0 | 000
1 | 001
2 | 010
3 | 011
4 | 100
5 | 101
6 | 110
7 | 111

لو هنستخدم نظام اسهل الاول من ال two's complement، وهو نظام ال signed binary، هنعبر بيه عن نفس عدد القيم، من 3- الى 3، عن طريق اننا بنعتبر اول bit من الشمال هي الاشارة، موجب لو صفر، سالب لو واحد:

binary | decimal

0 | 000
1 | 001
2 | 010
3 | 011
0- | 100
1- | 101
2- | 110
3- | 111

مشكلة النظام ده ان فيه صفرين، صفر موجب و صفر سالب، وفيه مشاكل في تصميم الهاردوير، الكلام ده كله موجود في الفيديو اللي تحت، فيه نظام تاني اسمه ال one's complement، فيه نفس المشاكل وبرده مشروح في الفيديو تحت الجزء الاول، انا مش هشرحه.

المهم نظام الtwo's complement، علشان نجيب ال complement او المرافق لاي رقم، قيمته السالبة يعني، مثلا رقم 2:
010

نجيب ال one's complement بتاعه، نقلب كل صفر يبقى واحد، وكل واحد يبقى صفر:
101

علشان الكلام ده يبقى two's complement، نزود عليه واحد:
1
101
001 +
ــــــــــ
110
دلوقتي 110 بتمثل القيمة 2-، علشان اثبت ده، مثلا لو عايزين نطرح 2 من 3، زي ما قلت في الاول:

(2-) + 3 = 3-2

يبقى احنا عايزين نجمع 3 (011) على 2- (110):

11
011
110 +
ــــــــ
001

النتيجة 1 (001)، لاحظ ان اخر واحد استلفناه في عملية الجمع مش ظاهر ف النتيجة، ده لانه حصله overflow، لان الريجستري انا معتبرها من الاول 3 bits، فكده مافيش مكان للbit الرابعة، وده المطلوب لانه لو ظهر في النتيجة هتبقى نتيجة غلط، في ال two's complement، ال 3 bits بتعبر برده عن سبع قيم، من 4- الى 3، ومشكلة الصفر اتحلت، دلوقتي شكل واحد بيعبر عن الصفر، مش شكلين، لاحظ ان الرقم في نصف الجدول بالظبط بيعبر عن اقل قيمة سالبة اللي هي هنا سالب اربعه:
binary | decimal

0 | 000
1 | 001
2 | 010
3 | 011
4- | 100
3- | 101
2- | 110
1- | 111

الفيديوهات فيها نفس الشرح بس بتفصيل اكتر شوية:

تعليقات

‏قال Unknown
لو سمحت ممكن تحل لي 10111100 و0010110 بطريقة s’1 وs’2

المشاركات الشائعة من هذه المدونة

المراحل الخمسة للثورة المصرية

أزمة السياسة والأحزاب في مصر