مفهوم کلی تبدیل نوع صریح
در برخی از برنامههای C، برنامهنویس باید بهصورت دستی و آگاهانه نوع داده را تغییر دهد. این فرایند Explicit Type Conversion یا Type Casting نام دارد.
تبدیل نوع صریح به شما اجازه میدهد نحوه تبدیل دادهها را کنترل کنید و از رفتارهای ناخواسته جلوگیری نمایید.
سینتکس Type Casting
برای تبدیل یک مقدار به نوعی دیگر از سینتکس زیر استفاده میشود:
(type_name) expression
در این ساختار:
| بخش | توضیح |
|---|---|
| type_name | نوع داده مقصد |
| expression | مقدار یا عبارتی که باید تبدیل شود |
اولین مثال
در مثال زیر مقدار اعشاری به عدد صحیح تبدیل میشود:
#include <stdio.h>
int main() {
float price = 19.99f;
int roundedPrice = (int)price;
printf("Original value: %.2f\n", price);
printf("Converted value: %d\n", roundedPrice);
return 0;
}
خروجی:
Original value: 19.99
Converted value: 19
در اینجا بخش اعشاری حذف شده است و مقدار گرد (round) نمیشود.
تبدیل float یا double به int همیشه قسمت اعشاری را حذف میکند و مقدار را به نزدیکترین عدد صحیح گرد نمیکند.
تبدیل برای جلوگیری از تقسیم صحیح
یکی از رایجترین کاربردهای Type Casting هنگام انجام عملیات تقسیم است.
مثال:
#include <stdio.h>
int main() {
int a = 5;
int b = 2;
float result = a / b;
printf("%.2f\n", result);
return 0;
}
خروجی:
2.00
اگرچه متغیر result از نوع float است، اما عملیات تقسیم ابتدا بین دو int انجام شده و نتیجه برابر 2 شده است.
راه حل:
#include <stdio.h>
int main() {
int a = 5;
int b = 2;
float result = (float)a / b;
printf("%.2f\n", result);
return 0;
}
خروجی:
2.50
در این مثال مقدار a قبل از انجام عملیات به float تبدیل شده است، بنابراین کل عبارت بهصورت اعشاری محاسبه میشود.
تبدیل بین انواع عددی
زبان C اجازه تبدیل بین انواع مختلف عددی را میدهد.
int به float
int count = 10;
float average = (float)count;
float به double
float value = 15.5f;
double result = (double)value;
double به int
double number = 25.87;
int integerPart = (int)number;
char به int
char letter = 'A';
int asciiCode = (int)letter;
خروجی:
65
در اینجا مقدار ASCII کاراکتر نمایش داده میشود.
تبدیل int به char
میتوان یک عدد صحیح را به کاراکتر متناظر آن تبدیل کرد:
#include <stdio.h>
int main() {
int asciiCode = 66;
char letter = (char)asciiCode;
printf("%c\n", letter);
return 0;
}
خروجی:
B
اولویت عملیات در Type Casting
عملگر Cast دارای اولویت بالایی است و قبل از اکثر عملیات ریاضی اجرا میشود.
مثال:
#include <stdio.h>
int main() {
int a = 7;
int b = 2;
float result = (float)(a + b) / b;
printf("%.2f\n", result);
return 0;
}
خروجی:
4.50
ابتدا عبارت (a + b) محاسبه شده و سپس نتیجه به float تبدیل میشود.
تبدیل چندگانه (Multiple Casting)
گاهی لازم است چند تبدیل پشت سر هم انجام شود:
double value = 100.75;
char result = (char)(int)value;
مراحل انجام تبدیل:
| مرحله | مقدار |
| مقدار اولیه | 100.75 |
| تبدیل به int | 100 |
| تبدیل به char | d |
کاراکتر d دارای کد ASCII برابر 100 است.
کاربردهای رایج Type Casting
محاسبه میانگین
#include <stdio.h>
int main() {
int total = 17;
int students = 4;
float average = (float)total / students;
printf("%.2f\n", average);
return 0;
}
محاسبات مالی
double taxRate = 0.09;
int amount = 250;
double tax = (double)amount * taxRate;
کار با کاراکترها
char ch = 'Z';
printf("%d\n", (int)ch);
خطرات تبدیل نوع صریح
هر تبدیل نوعی بدون ریسک نیست. برخی تبدیلها میتوانند باعث از دست رفتن داده شوند.
مثال:
double value = 9999999999.99;
int number = (int)value;
در این حالت ممکن است مقدار نهایی به دلیل محدودیت اندازه نوع int معتبر نباشد.
مثال دیگر:
float value = 3.99f;
int number = (int)value;
خروجی:
3
قسمت اعشاری کاملاً حذف میشود.
هنگام تبدیل از نوعی با محدوده بزرگتر به نوعی با محدوده کوچکتر، همیشه احتمال از دست رفتن اطلاعات وجود دارد.
تفاوت Implicit و Explicit Conversion
| ویژگی | Implicit Conversion | Explicit Conversion |
| انجامدهنده | کامپایلر | برنامهنویس |
| نیاز به Cast | ندارد | دارد |
| کنترل روی تبدیل | کمتر | بیشتر |
| خوانایی کد | سادهتر | شفافتر |
| احتمال خطا | بیشتر در تبدیلهای ناخواسته | کمتر زیرا تصمیم آگاهانه است |
چه زمانی از Explicit Type Conversion استفاده کنیم؟
- هنگام جلوگیری از Integer Division
- زمانی که میخواهید نوع داده خروجی را کنترل کنید
- هنگام تبدیل بین انواع عددی مختلف
- هنگام کار با مقادیر ASCII و کاراکترها
- زمانی که کامپایلر تبدیل موردنظر شما را بهصورت خودکار انجام نمیدهد
- برای افزایش خوانایی و مشخص کردن قصد برنامهنویس
تبدیل نوع صریح یکی از مهمترین ابزارهای کنترل داده در زبان C است. استفاده صحیح از Type Casting باعث میشود محاسبات دقیقتر، رفتار برنامه قابل پیشبینیتر و کد خواناتر شود.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات