اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

تبدیل نوع پیش‌فرض داده‌ها

+1 امتیاز
71 نمایش

من اطلاعات کمی در مورد تبدیل داده‌ها در C++ دارم. تبدیل پیش‌فرض و این‌ها رو کمی می‌دونم. الان یه سوال دارم که یه کم دقیق‌تر بررسی می‌کنه این موضوع و.
فرض کنیم کد زیر و داریم


int a;
char b;
long int c;
cin>>a>>b>>c;
cout<<(a+b)*c;

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

cout<<(a + (int)b) * c;
cout<<(long int)(a + (int)b) * c;
cout<<(long int)a + (long int)b) * c;
در ++C زبانی بسیار کوچک‌تر و پاکیزه‌تر در تلاش برای خروج است. (Bjarne Stroustrup)
پرسیده شده دوشنبه ۲۹ آبان ۱۳۹۱ در C++ توسط برنامه‌نویس  
بازتگ شده چهارشنبه ۲۱ فروردین ۱۳۹۲ توسط admin

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

در ابتدا C++ تا حدی سعی می‌کنه که عملیات تبدیل خودکار رو مناسب انجام بده مثلاً در صورتی که یک عمل دوتایی رو با یک int و یک long int انجام بدیم کامپایل به صورت خودکار مقدار int رو به عنوان long int در نظر می‌گیره تا چیزی رو به خاطر کمبود حافظه از دست نده.
ولی به طور کلی بهتره که به تبدیل خودکار اعتماد کامل نکنیم چون حالت‌هایی مثل int + char یه کم گیج‌کننده است.
در صورتی که عمل دوتایی با یک عدد صحیح ویک نوع اعشاری انجام بشه تبدیل صحیح به اعشاری صورت می‌گیره.
به طور کلی اینه که نه حالت بهینه انجام نمی‌شه و اصولاً شاید نشدنی باشه. حالت مطمئن انجام می‌شه.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده چهارشنبه ۱۶ اسفند ۱۳۹۱ توسط prodo  
انتخاب شده شنبه ۳۱ فروردین ۱۳۹۲ توسط admin