تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: چرا محدوده ی int در زبان سی بین 127تا -128 است

  1. #1
    در آغاز فعالیت
    تاريخ عضويت
    Nov 2017
    پست ها
    8

    پيش فرض

    میخواستم بدونم int که علامتدار هست و بیت علامت در مثبت که صفره بزرگترین عدد دو بتوان هفت منهای یک یعنی 127میشه ولی عدد-128 چطوری بدست میاد؟
    Last edited by pishan96; 04-12-2017 at 20:43.

  2. #2
    در آغاز فعالیت
    تاريخ عضويت
    Nov 2017
    پست ها
    8

    پيش فرض

    کسی نمیدونه؟؟؟:(

  3. #3
    پروفشنال
    تاريخ عضويت
    Dec 2012
    پست ها
    551

    پيش فرض

    از سیستم مکمل 2 استفاده میکنه.

    128 منفی میشه 10000000 . چون بیت علامت تغییر نمیکنه محدوده پایین میشه همون منفی 128
    128 مثبت هم میشه 10000000 ولی چون بیت علامت باید صفر باشه تو اعداد مثبت محدوده بالا رو 127 در نظر میگیره.

  4. این کاربر از kenzu بخاطر این مطلب مفید تشکر کرده است


  5. #4
    در آغاز فعالیت
    تاريخ عضويت
    Nov 2017
    پست ها
    8

    پيش فرض

    از سیستم مکمل 2 استفاده میکنه.

    128 منفی میشه 10000000 . چون بیت علامت تغییر نمیکنه محدوده پایین میشه همون منفی 128
    128 مثبت هم میشه 10000000 ولی چون بیت علامت باید صفر باشه تو اعداد مثبت محدوده بالا رو 127 در نظر میگیره.
    از راهنماییتون ممنونم ،وقتی هشت بیت داریم و میدونیم که مقدار علامتدار هست چطوری ازش -128 رو بدست میاریم و از چی مکمل دو میگیریم

  6. #5
    پروفشنال
    تاريخ عضويت
    Dec 2012
    پست ها
    551

    پيش فرض

    از راهنماییتون ممنونم ،وقتی هشت بیت داریم و میدونیم که مقدار علامتدار هست چطوری ازش -128 رو بدست میاریم و از چی مکمل دو میگیریم
    از 128 مکمل دو بگیری میشه (10000000) که برابره با -128 .
    عددهای بالاتر از 128 رو هم خودت میتونی تست کنی میبینی که علامت تغییر میکنه . پس محدودش همون 127 تا -128 میشه .

  7. 2 کاربر از kenzu بخاطر این مطلب مفید تشکر کرده اند


  8. #6
    کاربر فعال انجمن برنامه نویسی n00b's Avatar
    تاريخ عضويت
    May 2012
    محل سكونت
     
    پست ها
    297

    پيش فرض

    از راهنماییتون ممنونم ،وقتی هشت بیت داریم و میدونیم که مقدار علامتدار هست چطوری ازش -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- استفاده میشه..//// علاوه بر حل مشکل صفر// اگر اعداد منفی رو به این شکل ذخیره کنیم مدار های محاسباتی هم ساده تر میشن و..../////
    **************************
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ***********************
    ببخشید یکم طولانی شد سعی کردم خلاصه و ساده توضیح بدم// روش های دیگه ای هم برای نمایش اعداد منفی وجود دارن که از ذکرشون صرف نظر کردم/// اگر علاقه دارید می تونید تحقیق کنید اینجوری سیر تکاملی رو بهتر متوجه میشید..////
    *******************
    موفق باشید!

    *************************
    دوست عزیزمون kenzu امیدوارم پوزش بنده رو بپذیرید// پست جدیدتون رو بعد از نوشتن متن بالا دیدم..///
    Last edited by n00b; 06-12-2017 at 02:34.

  9. این کاربر از n00b بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •