الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الطرح في النظام الثنائي باستخدام المتممات

مغلقرائج
بدأه sam_t95 في 7 يوليو 2006 · 6 رد · 28,835 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

نعلم أنه باستخدام المتممات complements

يمكننا الطرح في النظام الثنائي

مثلا لطرح العدد 6 من 23 نقوم بصف العددين وبعدد متساوي من الخانات ثم نطرح كما يلي:

10111

00110

---------

10001

لكن عملية الطرح تتعقد أكثر في حال وجود استعارة من الخانة التي قبلها، وللتغلب على المشكلة نقوم باستبدال الطرح للعدد بجمع متممه لأثنين

في حال كان العدد المرفوع الأخير 1 فإننا نهمله ليظهر لنا الناتج النهائي مباشرة، وفي حال العدد المرفوع الأخير 0 فإننا نجمع الناتج مع متمم العدد لواحد فنحصل على النتيجة النهائية

المثال السابق نجد أن متمم العدد 6

00110

هو

11010

نقوم بتبديل العملية السابقة للطرح بعملية الجمع معه فنحصل على العملية التالية:

10111

11010

---------

110001

بما أن العدد المرفوع الأخير هو 1 فإننا نهمله ويكون الناتج هو

10001

كما حصلنا عليه في الطريقة الأولى

الأن كيف يمكننا باستخدام المتمم طرح العدد 6 من العدد -23

ولتمثيل العدد السالب نقوم بإضافة 1 في الخانة الأكثر وزنا أي الطرف الأيسر ليصبح العدد -23 مساوي لـ

110111

في حالة وجود خانة إشارة

أرجو إن كان أحد منكم يعلم الجواب أن يدلني ، ولكم جزيل الشكر

#2

سلام عليكم اخى العزيز

لا يمكن ان تكون العملية التى تريدها طرحاً

بمجرد انك جأت برقم موجب وحاولت طرحه من رقم سالب كبير اصبحت العملية عملية جمع لماذا

(-23)-6=(-29)

وهذا لان الاشارة السالبة في الاشارة الموجبة تساوى اشارة سالبة

وبذلك تصبح العملية تبعك

10111

+

00110

--------

11101

الناتج

29 ولكن بالسالب (-29)

هذا رايي والله اعلم *-)

يابن ادم ولدتك امك باكياً والناس حولك سروراً فعمل لي يوم اذا بكوا في يوم موتك ضاحكاً مسروراً

اطلب اي ملف Testking او كتاب من كتب ميكروسوفت في اي مجال

#3

العمليات الحسابية على الأعداد الثنائية ( أو الست عشرية) السالبة تستلزم تحديد قيمة عرض operands بالبيت bits.

لأن تمثيل نفس العدد السالب سيختلف من سعة Byte إلى سعة word أو dword.

فالعدد العشري السالب 1- سيمثل هكذا:

nible	byte			word
1111	11111111	1111111111111111

ملاحظة ثانية أن العمليات الحسابية على البيناري لا ننتبه هل هل هذه الأعداد سالبة أو موجبة, بل نقوم بعملية الجمع أو الطرح عادي, ونترك تأويل الناتج إلى الأخير لنقول مثلا إدا كانت operands هي أعداد صحيحة نسبية غذن فالخارج سيكون أيضا عددا صحيحا نسبيا و أن البيت الأخير هو ترميز للإشارة, لو كان يساوي 0 فالعدد موجب ولو كان يساوي 1 فالعدد سالب:

	11101001	-23	233
	-		
	00000110	  6	  6
	________	__	___
	11100011	-29	227

أركز على ضرورة تحديد في أي سعة تقوم بالحساب, في هذا المثال عملنا في سعة bytes اي 8 bits.

أنت لما قمت بالحساب كنت تستعمل 5bit ثم كان الخارج عندك في 6bits و هذا يعد خطأ overflow.

العدد الثنائي 11101001 إذا إعتبرناه عدد صحيح طبيعي فهو يرمز ل 233 بالعشري و إذا اعتبرته عدد صحيح نسبي فهو سيرمز ل -23 لأن آخر بيت سيكون رمز لللإشارة.

نفس المثال لكن بسعة 6 بيت كما جاء في مثالك:

	101001	-23	41
	-	
	000110	  6	 6
	______	__	__
	100011	-29	35

أرجو أن تكون الفكرة قد وصلت.

بالنسبة للمتمم فهناك متممين. متتمم لواحد و المتمم لإثنين.

المتمم لواحد هي العملية الأولى قبل المرور للمتمم ل2.

المتمم لواحد هي عملية قلب كل بيت إلى مقلوبه, بعد تمثيل العدد بالثنائي نقوم بقلب كل 1 إلى 0 و كل 0 إلى 1. بعدها نقوم بالعملية التي تسمى بالمتمم ل2 و هي إضافة 1 لقيمة ناتج المتمم ل1. بالتالي الناتج النهائي سيكون هو العدد السالب للعدد الابدئي بالتمثيل الثنائي:

n=		0010111	
			_______
Not(n)	1101000
+1		0000001
			_______
-n		1101001

دائما يجب تحديد عرض الأعداد بالبيت قبل أية عملية على الأعداد الثنائية.

تم تعديل هذه المشاركة بواسطة ikossan في 8 يوليو 2006 في 15:39

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#4

للإنصاف و حتى تقوم بما يقوم به المعالج حقيقة يجب تحويل ال 6 إلى متممة ال 2 و جمع الرقمين (-23) + (-6).

تم تعديل هذه المشاركة بواسطة Blueteeth في 8 يوليو 2006 في 18:22

#5

السلام عليكم جميعاً

أشكركم جميعا على ردودكم

أخي abkareno شكرا جزيلا لك، واود أن أقول لك أنني متفق معك بأنه يجب جمع العددين، لنحصل على الناتج ولكن هذا ولفضل الله علينا التفكير البشري، أما بالنسبة لأجهزة الكمبيوتر فهي غبية لذلك علي أن أقوم بإعطائها طريقة للقيام بما طلبت سابقاً

أخي ikossan

أود أن أقول لك بأني الأن أقوم الأن بالحساب على الورق فلذلك فعدد البتات غير مهم، وما يهم أن يكون العددين بنفس عدد البتتات

لنتكلم بالأمثلة:

العدد -23 يساوي

10111

وهو على 5 بتات وإذا أضفنا بت إشارة سالبة 1 يصبح 6 بتات بالشكل التالي:

110111

أما بالنسبة للرقم 6 فهو يساوي

110

ولجعله بنفس عدد بتات العدد -23 نضف 00 على الطرف الأيسر وبت الإشارة هو 0 ليصبح العدد 6 في النهاية مرمز على 6 بتات وهو:

000110

الأن لدينا قاعدة لعملية الطرح في النظام الثنائي:

A-B

نقوم بما يلي:

1. نكتب العددين بعدد بتات متساوي -- كما قمنا به في الأعلى.

2. نوجد متمم العدد المطروح لإثنين مع اعتبار أنه في حالة العدد موجب فإننا نغير بت الإشارة في المتمم إلى 1 وفي حال أنه سالب فإننا نتركه كما هو أي أن المتمم له نفس الإشارة.

3. نجمع العدد الأول مع المتمم الذي قمنا بحسابه ونناقش إحدى حالتين.

4. في حال ظهور خانة جديدة إلى أخر العدد قيمتها 1 فإننا نهمله ونكون قد حصلنا على الناتج النهائي مباشرة، وإن لم نحصل على خانة جديدة، فأننا نحصل على الجواب النهائي بعد إتمام ناتج الجمع السابق لإثنين

مثال: 43 - 12

1. نقوم بحساب الرقمين بالنظام الثنائي:

43 يساوي

101011

أي أنه مرمز على 6 خانات وبما أنه موجب فإن بت الإشارة هو صفر ويكون العدد 43 هو كما يلي:

0101011

وأصبح العدد النهائي على سبع خانات

العدد 12 يساوي

1100

أي أنه مرمز على 4 خانات ويجب جعله بنفس عدد خانات العدد الأول أي على 6 خانات فيصبح

001100

اي كأننا لم نغير شيء وبما أنه موجب أيضا فإن بت الإشارة صفر ويكون العدد 12 مع بت الإشارة كما يلي:

0001100

كذلك أصبح العدد 12 مرمز على 7 خانات

2. الأن نوجد متمم العدد 12 لإثنين كما تنص القاعدة السابقة لنجد أنه

1110100

3. نجمع المتمم مع العدد 43 لنجد أن الناتج

0101011

+

1110100

----------

10011111

4. الإن نجد أنه أصبح لدينا 8 خانات وأن الخانة الأكثر وزنا هي 1 وحسب القاعدة فإننا نهمله ليكون الجواب النهائي هو

0011111

وهو +31

وهذه القاعدة هي تماما ما قاله الأخ Blueteeth -- شكرا جزيلا لك --

الأن عودة الى السؤال الأول وهو كيف يمكنني طرح عدد موجب من عدد سالب، لأنني ربما بتطبيق القاعدة السابقة أقوم بخطأ ما أو أن هناك خطأ ما لاأعلم ما هو

أخي Blueteeth والجميع أرجو منكم أن تجربوا بأن تقوم بالعملية بنفسكم على الورق ربما ستحصل على العدد -34 وليس -29 وإن حصلتم على الجواب الصحيح فإنني أرجو أن تخبروني بالطريقة لأنني لم أصل لجواب وجزاكم الله خيرا جميعاً

.

#6
اقتباس
العدد -23 يساوي

10111

وهو على 5 بتات وإذا أضفنا بت إشارة سالبة 1 يصبح 6 بتات بالشكل التالي:

110111

لأ يا أخى فى غلط, العدد الثنائى اللى إنت كاتبه هو +23 مش سالب

23 = 10111

بعد إضافة بيت للإشارة -> 23 = 010111

بأخذ متممة ال 1 -> -23 = 101000

بجمع 1 لإيجاد متممة ال 2 -> -23 = 101001

و العدد 6 أيضا = 000110

متممة الواحد -> -6 = 111001

متممة ال 2 -> -6 = 111010

بجمع العددين ينتج 100011 ( و باقى 1 يهمل )

و هو التمثيل الصحيح للعدد -29 فى متممة ال 2

#7

شكرا لك Blueteeth

وجزاك الله خيرا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…