إخواني نحن نعرف بأنه إذا أراد أحدنا التحويل من نوع متغير أصغر إلى نوع متغير أكبر فهنا لن يكون هنالك أي مشكلة تذكر .
بينا إذا أردنا التحويل من نوع متغير أكبر إلى نوع متغير أصغر فإنه لا مفر من أن نستخدم عملية التحويل ( cast) إلى النوع الأصغر .. وهذا ما تعود عليه كل مبرمجي لغة JAVA .
ولكن لو لا حضنا الكود التالي :
double x = 52.2; byte y = (Byte)x; MessageBox.Show(Convert.ToString(y));
في المثال السابق علينا أن نلاحظ بأن قيمة المتغير x هي قيمة عشرية ولكنها تقل عن القيمة القصوي ( Max Value ) التي يمكن تخزينها في المتغير yوالذي هو بالأصل من النوع Byte .
لذا سنجد بأن قيمة المتغير y بعد عملية الـ cast قد أصبحت تساوي الجزء الصحيح فقط وهو الرقم 52 .
الأن ماذا لو قمنا بإعطاء المتغير x قيمة تزيد عن القيمة القصوى التي يمكن تخزينها في المتغير من النوع Byte ( أي قيمة تزيد عن 255 ) .
دعونا نجرب الكود التالي :
double x = 300; byte y = (Byte)x; MessageBox.Show(Convert.ToString(y));
هنا نلاحظ بأننا أعطينا المتغير x قيمة أكبر من القيمة التي يمكن تخزينها في المتغير y والذي هو من النوع Byte ( أي القيمة 300 تزيد عن القيمة المسموح بها في المتغيرات من النوع Byte ) وهذه الزيادة هي بمقدار 44 .
يعني ( 300-256=44 ) .
ولو نفذنا الشفرة السابقة سنجد بأن الناتج سوف يكون ============= 44 .
من هنا نفهم بأن هذا هو الوظيفة الأصلية لعملية الـ casting .
وهي التحويل إلى النوع الأقل .. ولكن إذا كانت القيمة أقل من القيمة القصوي فيت تجاهل العدد الكسري فقط ( من بعد الفاصلة العشرية ) , أما لو كان أكبر من القيمة القصوي فيتم الأخذ بالفارق ..
يعني لو كان في مثالنا
قيمة المتغير x هي 1250.65
فإننا سنجد بأن قيمة المتغير y سوف تكون تساوي 226
وهذه القيمة هي الفترق ما بين الرقمين التاليين :
256 * 4 = 1024
والرقم الذي هو عندنا ( 1250.65 )
لذا فالفارق بينهم كما يلي :
1250.65 - 1024 = 226
وهو المطلوب إثباتة :P ( # ) :P
بالتوفيق للجميع