Type Casting ตัวดำเนินการ แคสต์ ภาษา C

การแปลงประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่งเรียกว่าการแคสต์ประเภทหรือการแปลงประเภท ตัวอย่างเช่น หากคุณต้องการเก็บค่า ‘long’ เป็นจำนวนเต็มอย่างง่าย คุณสามารถพิมพ์ cast ‘long’ เป็น ‘int’ คุณสามารถแปลงค่าจากประเภทหนึ่งเป็นอีกประเภทหนึ่งได้อย่างชัดเจนโดยใช้ ตัวดำเนินการ cast ดังนี้ −

(type_name) expression


พิจารณาตัวอย่างต่อไปนี้ที่ตัวดำเนินการ cast ทำให้เกิดการแบ่งตัวแปรจำนวนเต็มตัวหนึ่งกับตัวแปรอื่นเพื่อดำเนินการเป็นการดำเนินการแบบทศนิยม:

#include <stdio.h>

main() {

   int sum = 17, count = 5;
   double mean;

   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Value of mean : 3.400000


ควรสังเกตว่าตัวดำเนินการ cast มีความสำคัญเหนือการหาร ดังนั้นมูลค่าของผลรวมจะถูกแปลงเป็นชนิด double ก่อนและสุดท้ายจะถูกหารด้วยจำนวนที่ให้ผลลัพธ์เป็นสองเท่า

แปลงชนิดสามารถเป็นนัยซึ่งจะดำเนินการโดยเรียบเรียงโดยอัตโนมัติหรืออาจจะระบุไว้อย่างชัดเจนผ่านการใช้งานของ cast operator ถือเป็นแนวทางปฏิบัติในการเขียนโปรแกรมที่ดีในการใช้ตัวดำเนินการ cast เมื่อใดก็ตามที่จำเป็นต้องแปลงชนิดข้อมูล


Integer Promotion


Integer Promotion เป็นกระบวนการโดยที่ค่าของชนิดจำนวนเต็ม “ขนาดเล็ก” กว่า int หรือ unsigned int จะถูกแปลงทั้ง int หรือ unsigned int พิจารณาตัวอย่างการเพิ่มอักขระด้วยจำนวนเต็ม −

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   int sum;

   sum = i + c;
   printf("Value of sum : %d\n", sum );
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Value of sum : 116

ในที่นี้ ค่าของผลรวมคือ 116 เนื่องจากคอมไพเลอร์ทำการเลื่อนระดับจำนวนเต็มและแปลงค่าของ ‘c’ เป็น ASCII ก่อนดำเนินการบวกจริง

Usual Arithmetic Conversion


Usual Arithmetic Conversion จะดำเนินการโดยปริยายเพื่อแปลงค่าเป็นประเภททั่วไป คอมไพเลอร์ทำการเลื่อนระดับจำนวนเต็มก่อน; หากตัวถูกดำเนินการยังคงมีประเภทที่แตกต่างกัน จะถูกแปลงเป็นประเภทที่ปรากฏสูงสุดในลำดับชั้นต่อไปนี้:

ตัวดำเนินการ แคสต์

การแปลงเลขคณิตปกติจะไม่ถูกดำเนินการสำหรับตัวดำเนินการกำหนด หรือสำหรับตัวดำเนินการทางตรรกะ && และ || ให้เรายกตัวอย่างต่อไปนี้เพื่อทำความเข้าใจแนวคิด −

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   float sum;

   sum = i + c;
   printf("Value of sum : %f\n", sum );
}


เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Value of sum : 116.000000


ในที่นี้ เข้าใจได้ง่ายว่า c ตัวแรกถูกแปลงเป็นจำนวนเต็ม แต่เนื่องจากค่าสุดท้ายเป็นสองเท่า การแปลงเลขคณิตปกติจะใช้ และคอมไพเลอร์แปลง i และ c เป็น ‘float’ และเพิ่มผลลัพธ์เป็น ‘float’

Leave a Reply

Your email address will not be published. Required fields are marked *