PDA

View Full Version : سوال: اعداد منفی و مثبت



Arcsinos
سه شنبه 18 اسفند 1388, 00:01 صبح
سوالمو باید تو بخش اسمبلی می نوشتم ولی چنین بخشی نبود مجبورم اینجا بنویسم :
من دارم یه کتاب میخونم که توش نوشته :

1111 1111 1111 1111 1111 1111 1111 1111 = 4.294.967.295
صفحه ی بعد نوشته :
1111 1111 1111 1111 1111 1111 1111 1111 = -1
میخواستم ببینم کامپیوتر چه جوری اعداد مثبت و منفی رو از هم تشخیص میده .

tdkhakpur
سه شنبه 18 اسفند 1388, 01:11 صبح
آخرین بیت اگر 1 باشه منفیه اگر صفر باشه مثبت میشه

Arcsinos
سه شنبه 18 اسفند 1388, 10:59 صبح
خب یعنی چی این دوتا اعداد که با هم برابرند یعنی آخر هر دوتاش یکه .
قبول داری که 0111=7 و 1111=-1 چون 1111=(0001)- که در اینجا یک آخر نشون میده که عدد مورد نظر علامت رو نشون میده مگر اینکه عدد هایی که تو کتاب نوشته شده 33 بیتی باشند یعنی تو کتاب بیت 33 رو ننوشته باشه درسته ؟

tdkhakpur
سه شنبه 18 اسفند 1388, 11:46 صبح
ببینید در حالت کلی منفی و مثبت بودن یک استعاره و معنی حقیقی ندارد این نرم افزار است که به عدد معنی میدهد.
در اسمبلی چیزی به عنوان منفی نداریم بلکه تجزیه و تحلیل شما باید این دو نوع را از هم تشخیص دهد و گزینه تشخیص هم بیت آخر هر بایت یا هر بازه ای از داده هاست 32 یا 16 یا 6 یا 64 فرقی ندارد.

Naruto
سه شنبه 18 اسفند 1388, 21:27 عصر
با توجه به اینکه سیستم تا 32 بیت رو شناسایی میکنه،از بیت سی و سوم (عدد1) صرف نظر شده.
با یک جمع و تفریق ساده این مساله قابل بررسیه.
بیت سرریز هم اگر اشتباه نکنم رو OF Flag تاثیر گذاره.

Arcsinos
سه شنبه 18 اسفند 1388, 23:56 عصر
خب الان سیستم از کجا میفهمه که بیت آخر بیت علامته یا بیت عدده ؟
1111=15 یا =-1 اگه بیت آخر بیت علامت باشه -1 ولی اگه نباشه 15 میشه درسته ؟

tdkhakpur
چهارشنبه 19 اسفند 1388, 00:14 صبح
خب الان سیستم از کجا میفهمه که بیت آخر بیت علامته یا بیت عدده ؟
1111=15 یا =-1 اگه بیت آخر بیت علامت باشه -1 ولی اگه نباشه 15 میشه درسته ؟

خب فلاگها اینا رو بهتون میگن.
اگه میخواهید خودتان بررسی کنید میتونید خودتان تحلیل کنید و یه قرار داد که cpu هم این کار رو میکنه بیت آخر اگر یک باشه منفیه اگر نه مثبت
ولی در حالت کلی استاندارد cpu هشت بیت حساب میشه نه 4 بیت

Naruto
چهارشنبه 19 اسفند 1388, 02:24 صبح
خب الان سیستم از کجا میفهمه که بیت آخر بیت علامته یا بیت عدده ؟
1111=15 یا =-1 اگه بیت آخر بیت علامت باشه -1 ولی اگه نباشه 15 میشه درسته ؟


در مثال اول که گفتید:
1111 1111 1111 1111 1111 1111 1111 1111 = FFFFFFFF
و
0000 0000 0000 0000 0000 0000 0000 1000= 80000000

در بازه بالا همه اعداد منفی هستند.

حالا اگر FFFFFFFF + 6 رو محاسبه کنیم حاصل برابر است با : 100000005

اون رقم یک سرریز هستش که OF Flag رو Set میکنه.

حالا اگه اون 1 سرریز رو حذف کنیم 00000005 باقی میمونه که از حاصل جمع 6+1- بدست اومد.
نتیجه:
ما هم مقدار واقعی با سرریز را داریم هم مقدار بدون سرریز را.

نکته :

ممکنه تو یه محیط مقدار FFFFFFFF به شما عدد 1- رو بده و تو یه محیط دیگه FFFFFFFFFFFFFFFF مقدار 1- رو نمایش بده.

در ماشین حساب ویندوز 64 بیت از یکها مقدار 1- رو به شما نمایش میده.

موفق باشید.