سلام
چرا متغير Boolean به ميزان 2 بايت از حافظه را اشغال ميكند؟ در صورتيكه با يك بايت مي توان 0 يا 1 را (True-False) را ذخيره نمود؟
سلام
چرا متغير Boolean به ميزان 2 بايت از حافظه را اشغال ميكند؟ در صورتيكه با يك بايت مي توان 0 يا 1 را (True-False) را ذخيره نمود؟
Edit Post !!!!!!!!!!!!!!!!!!!!
Last edited by aaaammmm87; 15-02-2010 at 21:17.
با سلام
اينم بايد بدونيم كه مقدار عددي True برابر -1 و مقدار عددي False برابر 0 ميباشد.
فكر كنم جوابتان را گرفته باشيد.
با تشكر
درستهبا سلام
اينم بايد بدونيم كه مقدار عددي True برابر -1 و مقدار عددي False برابر 0 ميباشد.
فكر كنم جوابتان را گرفته باشيد.
با تشكر
ولی حتی با یک بیت هم می شه این کار رو کرد.
اگر شما يك متغيي از نوع 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.
سلام
مقدار 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 بيت 1 بايت ميباشد.
به نظر من اين مباحث استانداردهاي تعريف شده اي ميباشد كه بحث در مورد آنها بيفايده است.
مثل اينكه بگيم پژو 206 با سرعت 120 هم راه ميره چرا تا سرعت 210 طراحي شده؟!
با تشكر
Last edited by 8086; 17-02-2010 at 21:18.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)