تحويل الأنواع (Type Casting) - الجزء 1
جزء من قسم Fundamentals في رحلة C على Coddy. الدرس 13 من 63.
تتيح لك عملية casting للأنواع في C تحويل قيمة من نوع بيانات إلى نوع بيانات آخر. وهذا مفيد عندما تحتاج إلى إجراء عمليات بين أنواع بيانات مختلفة.
هناك نوعان رئيسيان من تحويل الأنواع:
- التحويل الضمني (automatically)
- التحويل الصريح (يدويًا)
لنبدأ بالتحويل الضمني:
يحدث Implicit casting automatically عند التحويل من نوع بيانات أصغر إلى نوع أكبر:
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 يدويًا عن طريق وضع نوع البيانات الهدف بين قوسين قبل القيمة التي تريد convert إليها. وهذا ضروري عند التحويل من نوع بيانات أكبر إلى نوع أصغر، حيث قد يحدث فقدان للبيانات:
double decimal_num = 5.65;
int num;
// تحويل صريح من double إلى int
num = (int)decimal_num;بعد تنفيذ التعليمات البرمجية أعلاه، ستكون قيمة num هي 5
لاحظ أن الجزء العشري يكون truncated (غير rounded) عند إجراء casting من double إلى int. صيغة إجراء explicit casting هي:
(target_type) valueلأن هذا التحويل قد يؤدي إلى فقدان البيانات، تتطلب C أن تجريه بشكل صريح. وهذا يُخبر المترجم بأنك على دراية باحتمال فقدان البيانات.
التحدي
سهلاكتب برنامجًا يقوم بما يلي:
- يُعرّف متغيرًا من النوع double باسم
resultويعيّن له القيمة 5.65 - يُعرّف متغيرًا من النوع int باسم
grade - يُسنِد قيمة
resultإلىgradeباستخدام explicit casting - يطبع قيمة
gradeمع الرسالة "The grade is: " باستخدامprintf
جرّب بنفسك
#include <stdio.h>
int main() {
double result = 5.65;
int grade;
// استخدم التحويل الصريح لتحويل 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المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيالمعاملات المنطقية - الجزء الثالثتحدي المراجعةتدرّب بنفسك: مترجم C عبر الإنترنت