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 | decimal0 | 0001 | 0012 | 0103 | 0114 | 1005 | 1016 | 1107 | 111
لو هنستخدم نظام اسهل الاول من ال two's complement، وهو نظام ال signed binary، هنعبر بيه عن نفس عدد القيم، من 3- الى 3، عن طريق اننا بنعتبر اول bit من الشمال هي الاشارة، موجب لو صفر، سالب لو واحد:
binary | decimal0 | 0001 | 0012 | 0103 | 0110- | 1001- | 1012- | 1103- | 111
مشكلة النظام ده ان فيه صفرين، صفر موجب و صفر سالب، وفيه مشاكل في تصميم الهاردوير، الكلام ده كله موجود في الفيديو اللي تحت، فيه نظام تاني اسمه ال one's complement، فيه نفس المشاكل وبرده مشروح في الفيديو تحت الجزء الاول، انا مش هشرحه.
المهم نظام الtwo's complement، علشان نجيب ال complement او المرافق لاي رقم، قيمته السالبة يعني، مثلا رقم 2:
010
نجيب ال one's complement بتاعه، نقلب كل صفر يبقى واحد، وكل واحد يبقى صفر:
101
علشان الكلام ده يبقى two's complement، نزود عليه واحد:
1101001 +ــــــــــ110
دلوقتي 110 بتمثل القيمة 2-، علشان اثبت ده، مثلا لو عايزين نطرح 2 من 3، زي ما قلت في الاول:
(2-) + 3 = 3-2
يبقى احنا عايزين نجمع 3 (011) على 2- (110):
11011110 +ــــــــ001
النتيجة 1 (001)، لاحظ ان اخر واحد استلفناه في عملية الجمع مش ظاهر ف النتيجة، ده لانه حصله overflow، لان الريجستري انا معتبرها من الاول 3 bits، فكده مافيش مكان للbit الرابعة، وده المطلوب لانه لو ظهر في النتيجة هتبقى نتيجة غلط، في ال two's complement، ال 3 bits بتعبر برده عن سبع قيم، من 4- الى 3، ومشكلة الصفر اتحلت، دلوقتي شكل واحد بيعبر عن الصفر، مش شكلين، لاحظ ان الرقم في نصف الجدول بالظبط بيعبر عن اقل قيمة سالبة اللي هي هنا سالب اربعه:
binary | decimal0 | 0001 | 0012 | 0103 | 0114- | 1003- | 1012- | 1101- | 111
الفيديوهات فيها نفس الشرح بس بتفصيل اكتر شوية:
تعليقات