تبدیل نوع های داده ای در #C
شناسه پست: 1825
بازدید: 1599

در #C ما میتوانیم با استفاده از تبدیل ضمنی (خودکار) و یا تبدیل صریح (میتوانیم نحوه تبدیل را مشخص کنیم)، یک نوع داده ای را به نوع داده ای دیگر تبدیل کنیم.

این مقاله، سرفصلی از دوره آموزشی زیر میباشد:

اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک مبانی #c کلیک کنید.

حال اجازه دهید بیشتر در مورد این موضوع صحبت کنیم.

در این مقاله، ما قصد داریم موضوعات زیر را پوشش دهیم:

تبدیل ضمنی

خیلی از داده های مختلف با استفاده از انواع داده ای مختلف تفسیر میشوند. برای مثال، عدد 74 میتواند به عنوان یک integer بلکه همچنین به عنوان یک double تفسیر شود(74.0). دو حالت وجود دارد که تبدیل ضمنی در انها اعمال میشود.

اولین مورد زمانیست که ما یک expression را محاسبه میکنیم. کامپایلر به طور خودکار نوع های داده ای که ما در آن expression استفاده میکنیم را به همدیگر وقف میدهد:

در کد بالا، متغیر b از نوع double است و متغیر x از نوع int. در عبارت b + x، کامپایلر به طور ضمنی، x را از int به double تبدیل میکند و سپس نتیجه مورد نظر را به b اختصاص میدهد.

دومین حالت برای یک تبدیل زمانیست که کامپایلر نتیجه را در یک متغیر ذخیره میکند:

تبدیل ضمنی در #C

در این مثال ما میبینیم که هر دو متغیر y و x از نوع int هستند اما نتیجه از نوع double است.

حالا به این مثال توجه کنید:

نظرتان چیست؟ چه مقداری در متغیر b ذخیره میشود؟

پاسخ: “نتیجه 4.2” صحیح نیست. البته سوالی که اینجا مطرح میشود: “اما چرا”؟

کامپایلر سمت راست expression  را اول محاسبه میکند و تنها نتیجه مورد نظر را به double تبدیل میکند. بنابراین سمت راست expression یعنی x/y شامل اعداد integer است، بنابراین نتیجه نیز یک integer است که در این مثال نتیجه 4 میباشد (مقدار کوتاه میشود). بعد از این محاسبه، کامپایلر نتیجه را به داخل یک double تبدیل میکند و مقدار را به داخل متغیر b اختصاص میدهد:

تبدیل ضمنی در #C

اگر بخواهیم، میتوانیم با استفاده از تبدیل صریح بر روی متغیر x و یا y، این مشکل را برطرف کنیم.

تبدیل صریح

برای تبدیل صریح، ما باید یک کد اضافی را برای تبدیل یک نوع داده ای به نوع داده ای دیگر بنویسیم. ما دو شیوه متفاوت داریم، استفاده از یک عملگر cast  و یا استفاده از کلاس Convert.

حال به مثال زیر نگاه کنید:

خطای cast در #C

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

نحوه cast در #C

با استفاده از تبدیل cast (که اینجا از نوع int است)، ما میتوانیم با خیال آسوده، نوع های داده ای خود را cast کنیم و کامپایلر آن را تایید میکند. اما چیزی که ما اینجا میبینیم آن نتیجه ای که مد نظر ما است نمیباشد. اما نتیجه درست است. درک این نکته خیلی مهم است که زمانیکه ما، یک نوع با یک دامنه مقدار بزرگتر را به یک نوع با دامنه مقدار کوچکتر تبدیل میکنیم، عملگر cast در این حالت میتواند داده ها را کوچکتر نماید. دقیقا مانند کاری که با double در مثال انجام دادیم و آن را به int تبدیل کردیم.

حالا ما میخواهیم در مثالی که در قسمت تبدیل ضمنی انجام داده بودیم، عملگر cast را برای گرفتن نتیجه درست اعمال کنیم:

نتیجه اینجا 4.2 خواهد بود.

استفاده از کلاس Convert

همانطور که در ابتدا گفته بودیم، ما میتوانیم از کلاس Convert به همراه متدهای static آن، برای تبدیل صریح یک نوع داده ای پایه به نوع داده ای پایه دیگر استفاده کنیم:

تبدیل به رشته در #C

نتیجه گیری

بسیار عالی.

حال ما تبدیل نوع های داده ای و نحوه رفتار تبدیل ضمنی و صریح در #Cرا یاد گرفتیم.

در مقاله بعدی، ما قصد داریم در مورد ساختار خطی در #C صحبت کنیم.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید