تحويل الأنواع (Type Casting) - الجزء 1
جزء من قسم Fundamentals في رحلة C على Coddy — الدرس 13 من 63.
يسمح لك تحويل الأنواع (Type casting) في لغة C بتحويل قيمة من نوع بيانات إلى نوع آخر. وهذا مفيد عندما تحتاج إلى إجراء عمليات بين أنواع بيانات مختلفة.
هناك نوعان رئيسيان لتحويل أنواع البيانات (type casting):
- التحويل الضمني (تلقائي)
- التحويل الصريح (يدوي)
لنبدأ بالتحويل الضمني:
يحدث التحويل الضمني (Implicit casting) تلقائياً عند التحويل من نوع بيانات أصغر إلى نوع بيانات أكبر:
int num = 10;
double decimal_num;
// تحويل ضمني من int إلى double
decimal_num = num;بعد تنفيذ الكود أعلاه، ستكون قيمة decimal_num هي 10.0
يعمل هذا لأن النوع double يمكنه تخزين جميع القيم الممكنة للنوع int دون فقدان أي بيانات. عملية التحويل آمنة، لذا تقوم لغة C بذلك تلقائياً.
مسارات التحويل الضمني الشائعة:
- char → int → long → float → double
الآن لنلقِ نظرة على التحويل الصريح (explicit casting):
يتم إجراء التحويل الصريح (Explicit casting) يدويًا عن طريق وضع نوع البيانات المستهدف بين قوسين قبل القيمة التي تريد تحويلها. وهذا ضروري عند التحويل من نوع بيانات أكبر إلى نوع أصغر، حيث قد يحدث فقدان للبيانات:
double decimal_num = 5.65;
int num;
// التحويل الصريح من double إلى int
num = (int)decimal_num;بعد تنفيذ الكود أعلاه، سيكون لـ num القيمة 5
لاحظ أن الجزء العشري يتم بتره (وليس تقريبه) عند التحويل من double إلى int. صيغة التحويل الصريح (explicit casting) هي:
(target_type) valueلأن هذا التحويل قد يؤدي إلى فقدان البيانات، تتطلب لغة C منك القيام بذلك بشكل صريح — وهذا يخبر المترجم (compiler) بأنك على دراية بفقدان البيانات المحتمل.
التحدي
سهلاكتب برنامجاً يقوم بما يلي:
- يعلن عن متغير
doubleباسمresultويضبط قيمته على 5.65 - يعلن عن متغير
intباسمgrade - يسند قيمة
resultإلىgradeباستخدام التحويل الصريح (explicit casting) - يطبع قيمة
gradeمع الرسالة "The grade is: " باستخدام printf
ورقة مرجعية
التحويل الضمني (Implicit casting) — تحويل تلقائي من نوع أصغر إلى نوع أكبر:
int num = 10;
double decimal_num = num; // يصبح 10.0مسار التحويل الضمني الشائع: char → int → long → float → double
التحويل الصريح (Explicit casting) — تحويل يدوي باستخدام (target_type) value:
double decimal_num = 5.65;
int num = (int)decimal_num; // يصبح 5 (يتم قطعه، وليس تقريبه)استخدم التحويل الصريح عند التحويل من نوع أكبر إلى نوع أصغر، حيث قد يحدث فقدان للبيانات.
جرّب بنفسك
#include <stdio.h>
int main() {
double result = 5.65;
int grade;
// استخدم التحويل الصريح (explicit casting) لتحويل result (double) إلى grade (int)
printf("The grade is: %d\n", grade);
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
2المتغيرات
أنواع البياناتالأعداد الصحيحة (Integer)الأعداد العشرية (Float - Double)المحارف (Characters)القيم المنطقية (Booleans)الثوابتأساسيات printfقواعد تسمية المتغيراتتحويل الأنواع (Type Casting) - الجزء 1تحويل الأنواع (Type Casting) - الجزء 2تحدي المراجعة3المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيالمعاملات المنطقية - الجزء الثالثتحدي المراجعة