میخواستم بدونم int که علامتدار هست و بیت علامت در مثبت که صفره بزرگترین عدد دو بتوان هفت منهای یک یعنی 127میشه ولی عدد-128 چطوری بدست میاد؟
Printable View
میخواستم بدونم int که علامتدار هست و بیت علامت در مثبت که صفره بزرگترین عدد دو بتوان هفت منهای یک یعنی 127میشه ولی عدد-128 چطوری بدست میاد؟
کسی نمیدونه؟؟؟:(
از سیستم مکمل 2 استفاده میکنه.
128 منفی میشه 10000000 . چون بیت علامت تغییر نمیکنه محدوده پایین میشه همون منفی 128
128 مثبت هم میشه 10000000 ولی چون بیت علامت باید صفر باشه تو اعداد مثبت محدوده بالا رو 127 در نظر میگیره.
از راهنماییتون ممنونم ،وقتی هشت بیت داریم و میدونیم که مقدار علامتدار هست چطوری ازش -128 رو بدست میاریم و از چی مکمل دو میگیریمنقل قول:
از 128 مکمل دو بگیری میشه (10000000) که برابره با -128 .نقل قول:
عددهای بالاتر از 128 رو هم خودت میتونی تست کنی میبینی که علامت تغییر میکنه . پس محدودش همون 127 تا -128 میشه .
**********************نقل قول:
سلام.../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
****************************
همون طور که دوست عزیزمون گفتند از روش مکمل دو استفاده میشه.../// ولی اینکه از کجا و به چه صورت به این روش رسیدن داستانش طولانی هست../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
**************************
اولاً محدوده ای که ذکر کردید برای اعداد byte هست و int محدوده ی بزرگتری رو داره../// هر بایت معادل 8 بیت هست که هر کدوم می تونن عدد صفر یا یک رو ذخیره کنند// پس تمام حالت هایی که می تونن به وجود بیارن 2×2×2×2×2×2×2×2 حالت یا 2 به توان 8 حالت که میشه 256 تا.../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
**********************************
پس یعنی حداکثر 256 عدد رو میشه داخل 8 بیت ذخیره کرد../// که اگر از صفر شمارش کنیم 256 امین عدد میشه 255.../// پس یعنی اعداد 0 1 2 ... 254 255 رو میشه داخل 8 بیت ذخیره کرد../// البته در صورتی که شمارش رو از صفر شروع کنیم و همه ی اعداد رو مثبت (بدون علامت) در نظر بگیریم../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
*******************************
در صورتی که اعداد رو علامت دار در نظر بگیریم همون طور که خودتون عرض کردید 1 بیت رو به عنوان علامت در نظر می گیریم// در صورتی که بیت علامت برابر صفر باشه عدد مثبت و یک نمایانگر عدد منفی هست../// اینجا هم فرقی نمی کنه هنوز 256 عدد رو می تونیم داخل این 8 بیت ذخیره کنیم.../// در صورتی که شمارش رو از 128- شروع کنید در نهایت بعد از شمارش صفر به عدد 127 میرسید.../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
****************************
فرض کنید همون طور که عرض کردید 1 بیت رو به علامت و 7 بیت رو به عدد اختصاص بدیم../// در اینصورت اگر اعداد رو فقط به مبنای دو تبدیل کنیم عدد صفر برابر 0000 0000 و عدد یک برابر 0001 0000 و عدد دو برابر 0010 0000 و عدد سه برابر 0011 0000 و ... میشه و در نهایت عدد 127 برابر 1111 0111 میشه../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
*********************************
از طرفی برای نمایش اعداد منفی بیت علامت رو هم روشن می کنیم و عدد صفر برابر 0000 1000 و عدد منفی یک برابر 0001 1000 و عدد منفی دو برابر 0010 1000 و ... و در نهایت عدد 127- میشه 1111 1111.../// اما مشکلی که هست اینه که برای نمایش صفر دو شکل مختلف وجود داره(0000 0000 و 0000 1000) که باعث به وجود اومدن یه سری مشکلاتی میشه مثلاً محاسبات پیچیده میشه و باید هر دو نمایش عدد صفر رو داخل مدار ها در نظر گرفت و اینکه می تونیم یکی از نمایش ها رو (مثلاً 0000 1000) به یه عدد دیگه مثل 128- اختصاص بدیم تا محدوده ی بزرگتری داشته باشیم.../// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
*******************************
راه حل استفاده از روش مکمل دو هست و روش محاسبش تو کامپیوتر به این شکل هست که اول مکمل عدد محاسبه میشه (صفر ها تبدیل به یک و یک ها تبدیل به صفر میشن//) و حاصل با عدد یک جمع میشه/// برای مثال عدد 1 برابر 0001 0000 هستش و مکمل عدد یک برابر میشه با 1110 1111 و مجموعش با یک میشه 1111 1111 یعنی مکمل دو عدد 1 (0001 0000) برابر میشه با (1111 1111) که برای نمایش عدد 1- ازش استفاده می کنیم.../// و عدد 127 (1111 0111) که اگه مکمل دو این عدد رو محاسبه کنیم حاصل برابر میشه با 0001 1000 که برای نمایش عدد 127- ازش استفاده می کنیم../// و عدد 128 که در مبنای 2 میشه 0000 1000 و مکملش برابر میشه با 1111 0111 و وقتی با یک جمع بشه مکمل دو برابر میشه با 0000 1000 که برای نمایش عدد 128- ازش استفاده می کنیم.../// همین طور که می بینید مشکل دو نمایش برای عدد صفر حل میشه../// و نمایش دوم عدد صفر که تو روش قبل برابر میشد با 0000 1000 حالا برای نمایش عدد 128- استفاده میشه..//// علاوه بر حل مشکل صفر// اگر اعداد منفی رو به این شکل ذخیره کنیم مدار های محاسباتی هم ساده تر میشن و....///// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
**************************
***********************کد:0 0000 0000
1 0000 0001
2 0000 0010
126 0111 1110
127 0111 1111
-128 1000 0000
-127 1000 0001
-126 1000 0010
-2 1111 1101
-1 1111 1111
ببخشید یکم طولانی شد سعی کردم خلاصه و ساده توضیح بدم// روش های دیگه ای هم برای نمایش اعداد منفی وجود دارن که از ذکرشون صرف نظر کردم/// اگر علاقه دارید می تونید تحقیق کنید اینجوری سیر تکاملی رو بهتر متوجه میشید..//// [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
*******************
موفق باشید! [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
*************************
دوست عزیزمون kenzu امیدوارم پوزش بنده رو بپذیرید// پست جدیدتون رو بعد از نوشتن متن بالا دیدم../// :»