View Full Version : integer چرا 4 بایت در GCC اشغال می کند؟
Arman_gh
شنبه 31 شهریور 1386, 08:40 صبح
سلام گرامیان.من تازه آغاز به یادگیری C کردم و در همین آغاز یادگیری به این نکته پی بردم که integer در Turbo C تنها دو بایت اشغال می کند ولی در GCC چهار بایت چرایی این موضوع را می خواستم بدانم.سپاسگزارم.
emad_67
شنبه 31 شهریور 1386, 08:54 صبح
تا اونجا که من میدونم int روی کامپیوتر های 32 بیتی کلا 4 بایت فضا میگیره. متغیر int در کامپیوتر های قدیمی 2 بایت ( 16 بیت) فضا اشغال میکرده به خاطر همین هست که الان روی در کامپایلر های c و c++ فرقی بین int و long int وجود نداره. چون هر دوشون 32 بیت فضا میگیرن
البته روی tc چک نکردم
Arman_gh
شنبه 31 شهریور 1386, 09:00 صبح
شما اگر TC را دارید این برنامه را امتحان کنید.
#include <stdio.h>
int main(){
int i=15,j=12,*ip;
ip=&j;
printf("ip point to %p Address \n",ip);
printf("%d\n",*ip);
ip++;
printf("%d\n",*ip);
printf("ip point to %p Address \n",ip);
printf("%d",*ip);
return 0;
}
emad_67
شنبه 31 شهریور 1386, 09:20 صبح
درسته همون طور که شما می فرمایید هست نمیدونم علتش چی هست ولی در کامپیایلر های تحت ویندوز فکر میکنم 4 بایت باشه
در مورد تحت داس رو نمیدونم
emad_67
شنبه 31 شهریور 1386, 09:28 صبح
الان چک کردم متوجه شدم مشکل چیه.
علتش اینه که شما کامپایلرت تحت داس هست و تحت داس int برابر 2 بایت هست ولی تحت ویندوز 4 بایت
Nima_NF
دوشنبه 02 مهر 1386, 02:26 صبح
الان چک کردم متوجه شدم مشکل چیه.
علتش اینه که شما کامپایلرت تحت داس هست و تحت داس int برابر 2 بایت هست ولی تحت ویندوز 4 بایت
مشکل اینکه با وجود گذشت 20 سال از عمر Turbo C همچنان ازش استفاده می شه. در این دوران C و ++ C و در نتیجه کامپایلر ها تغییرات بسیاری کرده اند.
اگر از کامپایلر های جدید استفاده بشه(که همه قابلیت تحت کنسول یا یه جورایی همون dos )دیگه مشکلی نیست، debug هم راحت تر هست.
SMRAH1
چهارشنبه 04 مهر 1386, 01:58 صبح
در انواع متغیر صحیح دو نوع مهم داریم:
short int و long int
در کامپایلر های قدیمی int رو معادل short میگرفتند ولی در کامپایلر های جدید معادل long میگیرند.که در حالت اول 2 بایت و در حالت دو 4 بایت اشغال میکنه.توجه کنید که ربان سی یه زبان قابل حمل است (یعنی در هر سیستمی با کامپایلر مخصوصش قابل کامپایل است) پس وجود بعصی تفاوت ها طبیعی است (این تفاوت ها حتی در نوع استفاده ار بعضی تفابع استاندار نیز هست) به همین دلیل در برنامه های حرفه ای ابتدا (در یک سرفایل) نوع دقیق متغیر رو مشخص میکنند مثلا int32 یا int16 و... و بعد از اونها استفاده می کنند.
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.