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’