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

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




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

نام تاپيک: boolean

  1. #1
    در آغاز فعالیت
    تاريخ عضويت
    Dec 2008
    پست ها
    3

    2 boolean

    سلام
    چرا متغير Boolean به ميزان 2 بايت از حافظه را اشغال مي‌كند؟ در صورتيكه با يك بايت مي توان 0 يا 1 را (True-False) را ذخيره نمود؟

  2. #2
    آخر فروم باز aaaammmm87's Avatar
    تاريخ عضويت
    Nov 2007
    محل سكونت
    ♥♥♥♥♥♥♥
    پست ها
    1,860

    پيش فرض

    Edit Post !!!!!!!!!!!!!!!!!!!!

    Last edited by aaaammmm87; 15-02-2010 at 21:17.

  3. #3
    اگه نباشه جاش خالی می مونه 8086's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    tehran
    پست ها
    229

    پيش فرض

    سلام
    چرا متغير Boolean به ميزان 2 بايت از حافظه را اشغال مي‌كند؟ در صورتيكه با يك بايت مي توان 0 يا 1 را (True-False) را ذخيره نمود؟
    با سلام
    اينم بايد بدونيم كه مقدار عددي True برابر -1 و مقدار عددي False برابر 0 ميباشد.
    فكر كنم جوابتان را گرفته باشيد.
    با تشكر

  4. #4
    حـــــرفـه ای MrGee's Avatar
    تاريخ عضويت
    May 2008
    محل سكونت
    کرج
    پست ها
    3,693

    پيش فرض

    با سلام
    اينم بايد بدونيم كه مقدار عددي True برابر -1 و مقدار عددي False برابر 0 ميباشد.
    فكر كنم جوابتان را گرفته باشيد.
    با تشكر
    درسته
    ولی حتی با یک بیت هم می شه این کار رو کرد.

  5. #5
    اگه نباشه جاش خالی می مونه 8086's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    tehran
    پست ها
    229

    پيش فرض

    درسته
    ولی حتی با یک بیت هم می شه این کار رو کرد.
    اگر شما يك متغيي از نوع boolean داشته باشيد اين متغيير همزمان دو مقدار True و False‌ را در خود نگه ميدارد.
    و با توجه به دستورات اعمالي شما يك مقدار را برميگرداند.

    به مثال زير دقت كنيد:
    Dim a As integer
    a=2
    ? a

    ما ميدانيم يك متغيير از نوع integer دو بايت حافظه اشغال ميكند كه محدوده ي عددي آن از 32767 تا -32768 را در خود نگه ميدارد.

    يا مثلا:
    Dim a As String*3
    a="String"
    ? a
    خروجي: Str

    ميدانيم كه يك متغيير از نوع String با طول ثابت به تعداد نويسه كه ما در متغيير ميريزيم مقدار نميگيرد و بستگي به نوع تعريف كردن ما دارد كه ميتواند تا 65400 نويسه را در خود قرار دهد. كه ما در اينجا مقدار 3 را به متغيير نسبت داده ايم، حالا چه يك حرف درون آن بريزيم و چه يك كلمه 6 بايتي مثل String را درون آن بريزيم، همان 3 بايت را اشغال ميكند.

    حالا بر متغيير Boolean هم همين موضوع حاكم است و وقتي كه ما يك متغيير از نوع Boolean تعريف ميكنيم مقدار پيش فرض آن 2 بايت است.
    يادمان باشد Boolean ثابت است و مقداري پيش فرض دارد و مقدار پيش فرض آن 0 يا همان False است.

    با تشكر



    Last edited by 8086; 15-02-2010 at 11:55.

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


  7. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    مقدار Boolean فقط دو مقدار میتواند داشته باشد و یک تک بیت هم برای آن کافی است ولی تخصیص 2 یا 4 بایت در زبانهای مختلف به این نوع متغییر در راستای هماهنگی با هسته سیستم عامل و توابع API های ان میباشد.

    چون وقتی ویندوز 32 بیتی است اکثر توابع API بنیادین که شالوده ویندوز را تشکیل میدهند پارامترها را در قالب 32 بیتی میگرند و پس میدهند.

    یک عدد را 32 بیتی میگرند و اگر عددی بزرگی بخواهند دو تا ورودی/خروجی 32 بیتی high و low خواهند داشت!

    یک string را باز هم 32 بیتی میگیرند!!!!!!!!!
    ولی 32 بیتی که به نقطه RAM ای اشاره دارد که striong در ان قرار دارد.
    یعنی 32 بیت شامل یک عدد که آدرس RAM است.

    یک Boolean را هم 32 بیتی میگرند و صفر را به False و غیر صفر را کلا به True تعبیر میکنند.

    =====

    از طرف دیگر اکثر توابع و دستوراتی که در زبانهای برنامه نویسی وجود دارد نگاشتی به اجرای تابع اصلی API هسته سیستم عامل است.
    پس هرچقدر ورودی و خروجی این توابع در برنامه نویسی هماهنگی بیشتری با API های اصلی شان داشته باشد کدهای میانی کمتری نیاز است و با کمترین میزان پردازش میتوان اطلاعات را هماهنگ کرد.

    به همین دلیل مقدار فضای Boolean بسته به شرایط و سیستم عامل و زبان و... 2 یا 4 بایت درنظر گرفته میشود.


    این مساله هماهنگی گاهاً حتی در شرایط اپراتورها هم وجود دارد مثلاً به صورت خاص در VB6 قدیم دستوری مثل این مجاز بوده:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دقت میکنید که چطور بدون حتی وجود یک اپراتور صریح VB6 یک Integer یا Long و... را به یک Boolean تعبیر میکند؟

    =====

    در نهایت بجهت هماهنگی بین محصولات مختلف (مثل ارتباط VB6 با محصولات تحت COM) و سرعت این رویه برای Boolean ها در زبانهای مختلف و بسته به شرایط اتخاذ شده است.
    در نهایت در مصرزف RAM هم چندان تاثیری ندارد، چون معمولاً تعداد متغیرهای محلی زیاد نیستند مگر انکه آرایه شوند.


    مطلب مرتبط: (پست 12)
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    موفق باشید.
    Last edited by _H2_; 15-02-2010 at 23:04.

  8. #7
    اگه نباشه جاش خالی می مونه 8086's Avatar
    تاريخ عضويت
    Jan 2010
    محل سكونت
    tehran
    پست ها
    229

    پيش فرض

    با سلام
    در ضمن واحد اصلي ظرفيت حافظه بايت ميباشد.
    اينم ميدونيم كه هر 8 بيت 1 بايت ميباشد.

    به نظر من اين مباحث استانداردهاي تعريف شده اي ميباشد كه بحث در مورد آنها بيفايده است.
    مثل اينكه بگيم پژو 206 با سرعت 120 هم راه ميره چرا تا سرعت 210 طراحي شده؟!
    با تشكر
    Last edited by 8086; 17-02-2010 at 21:18.

Thread Information

Users Browsing this Thread

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

User Tag List

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

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