การแคสต์ประเภทเป็นวิธีแปลงตัวแปรจากประเภทข้อมูลหนึ่งไปเป็นข้อมูลประเภทอื่น ตัวอย่างเช่น หากคุณต้องการเก็บค่า 'long' เป็นจำนวนเต็มอย่างง่าย คุณสามารถพิมพ์ cast 'long' เป็น 'int' คุณสามารถแปลงค่าจากประเภทหนึ่งเป็นอีกประเภทหนึ่งได้อย่างชัดเจนโดยใช้ตัวดำเนินการแคสต์ ดังนี้ −
(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 ก่อน และสุดท้ายจะถูกหารด้วยจำนวนที่ได้ double ค่า
การแปลงประเภทสามารถทำได้โดยปริยายซึ่งดำเนินการโดยคอมไพเลอร์โดยอัตโนมัติ หรือสามารถระบุได้อย่างชัดเจนโดยใช้ตัวดำเนินการแคสต์ ถือเป็นแนวทางปฏิบัติในการเขียนโปรแกรมที่ดีในการใช้ตัวดำเนินการ cast เมื่อใดก็ตามที่จำเป็นต้องแปลงประเภท
โปรโมชั่นจำนวนเต็ม
การเลื่อนระดับจำนวนเต็มเป็นกระบวนการที่ค่าของประเภทจำนวนเต็ม "เล็ก" กว่า int หรือ int ที่ไม่ได้ลงนามจะถูกแปลงเป็น 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 ก่อนดำเนินการบวกจริง
การแปลงเลขคณิตปกติ
การแปลงเลขคณิตปกติ ถูกดำเนินการโดยปริยายเพื่อแปลงค่าเป็นประเภททั่วไป คอมไพเลอร์ทำการเลื่อนระดับจำนวนเต็มก่อน; หากตัวถูกดำเนินการยังคงมีประเภทที่แตกต่างกัน จะถูกแปลงเป็นประเภทที่ปรากฏสูงสุดในลำดับชั้นต่อไปนี้ -
การแปลงเลขคณิตปกติจะไม่ถูกดำเนินการสำหรับตัวดำเนินการกำหนด หรือสำหรับตัวดำเนินการทางตรรกะ &&และ || ให้เรายกตัวอย่างต่อไปนี้เพื่อทำความเข้าใจแนวคิด -
ตัวอย่าง
#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'พี>