PDA

View Full Version : درموردذخیره داده ها در حافظه



bombas
شنبه 07 آبان 1390, 14:08 عصر
سلام

یه مشکلی در مورد byte داشتم هر 1 byte چند بیت هست ؟ 8 بیت(یعنی 8 کاراکتر 123456798) این درست ؟(خوب حالا یه برنامه مینویسم مثلا با یه زبان برنامه نویسی x یک عدد را به عنوان ورودی دریافت میکندمثلا 1 این یک چند بایت از حافظه را اشغال میکند؟پیش فرض عدد صحیح 2 بایت باشد)

Hooman.Prog
شنبه 07 آبان 1390, 15:02 عصر
اشتباه نکن. هر کاراکتر یک بایت رو اشغال میکنه. البته کاراکتر ASCII. وگرنه کاراکترهای یونیکد (مثلا حروف فارسی) هرکدام بیشتر از یک بایت فضا میگیرن.
عددی رو هم که بگیری بستگی داره در چه محدوده ای باشه و از چه متغییری برای ذخیرهء اون استفاده کنی. یک بایت بدون علامت از صفر تا 255 رو میتونه ذخیره کنه و نه بیشتر و نه کمتر. اعداد صحیح استاندارد در رایانه های 32 بیتی 32 بیت یعنی 4 بایت هستن. فرقی نمیکنه شما توی یه متغییر 4 بایتی 1 رو ذخیره کنی یا بزرگترین عددی رو که توش جا میشه؛ همشون 4 بایت فضا رو اشغال میکنن (بخاطر اینکه اندازهء متغییرش اونقدر هست).
البته اگر از متغییر دو بایتی استفاده کنی طبیعتا 2 بایت اشغال میشه. فکر میکنم در داس و رایانه های 16 بیتی، متغییرهای صحیح معمولی/استاندارد 2 بایتی بودن.

ضمنا بین ذخیرهء 1 بصورت رشته (کاراکتر) و بصورت صحیح تفاوت وجود داره. مشکل شما همینه که این دوتا رو قاطی کردید.
عدد 1 بصورت کاراکتر یک کد ASCII داره با اون کد در یک بایت ذخیره میشه. یعنی اون بایت رو اگر بصورت کاراکتر بخونی درسته اما اگر بصورت عدد صحیح درنظر بگیری و بخونی عدد 1 بدست نمیاد (بلکه کد ASCII عدد 1 بدست میاد).
بعکس اگر عدد 1 رو بصورت عدد صحیح در متغییری ذخیره کنی و بعد بخونی اگر بصورت عدد صحیح بخونی درسته اما اگر مقدار متغییر رو بعنوان کد ASCII تفسیر کنی دیگه عدد 1 بدست نمیاد.

اگر بخوای اعداد رو در متغییری ذخیره کنی، ذخیره بصورت عددی فضای کمتری میگیره تا ذخیره بصورت کاراکتر. چون برای ذخیرهء هر کاراکتر حداقل یک بایت فضا لازمه. یعنی مثلا عدد 230 رو درنظر بگیر. این عدد اگر بصورت رشته ای بخواد ذخیره بشه سه بایت رو اشغال میکنه (تازه بعلاوهء یک بایت null در انتها میشه 4 بایت)؛ اما اگر اون رو بصورت عددی ذخیره کنی میتونی در یک بایت ذخیره کنی (به شرطی که نوع متغییر انتخاب شده تک بایتی باشه).