การหล่อประเภทใน C: การแปลงประเภท, โดยนัย, ชัดเจนพร้อมตัวอย่าง

Typecasting ใน C คืออะไร?

การแปลงประเภทข้อมูลคือการแปลงประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่ง เรียกอีกอย่างหนึ่งว่าการแปลงข้อมูลหรือการแปลงประเภทข้อมูลในภาษาซี ถือเป็นแนวคิดสำคัญอย่างหนึ่งที่นำเสนอในการเขียนโปรแกรมแบบ "C"

การเขียนโปรแกรมแบบ 'C' มีการดำเนินการแปลงประเภทสองประเภท:

  1. การหล่อประเภทโดยนัย
  2. การหล่อประเภทที่ชัดเจน

การหล่อประเภทโดยนัย

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

การแปลงประเภทโดยปริยายใน C จะเกิดขึ้นโดยอัตโนมัติเมื่อค่าถูกคัดลอกไปยังประเภทข้อมูลที่เข้ากันได้ ในระหว่างการแปลง จะมีการใช้กฎเกณฑ์ที่เข้มงวดสำหรับการแปลงประเภท หากตัวดำเนินการมีประเภทข้อมูลที่แตกต่างกันสองประเภท ตัวดำเนินการที่มีประเภทข้อมูลต่ำกว่าจะถูกแปลงเป็นประเภทข้อมูลที่สูงกว่าโดยอัตโนมัติ การแปลงประเภทนี้สามารถดูได้จากตัวอย่างต่อไปนี้

#include<stdio.h>
int main(){
	short a=10; //initializing variable of short data type
	int b; //declaring int variable
	b=a; //implicit type casting
	printf("%d\n",a);
	printf("%d\n",b);
}

Output:

10
10

การหล่อประเภทโดยนัย

  1. ในตัวอย่างที่กำหนด เราได้ประกาศตัวแปรประเภทข้อมูลแบบสั้นโดยมีค่าเริ่มต้นเป็น 10
  2. ในบรรทัดที่สอง เราได้ประกาศตัวแปรประเภทข้อมูล int
  3. ในบรรทัดที่สาม เราได้กำหนดค่าของตัวแปร s ให้กับตัวแปร a ในบรรทัดที่สาม การแปลงประเภทโดยนัยจะดำเนินการโดยค่าจากตัวแปร s ซึ่งเป็นประเภทข้อมูลแบบสั้นจะถูกคัดลอกไปยังตัวแปร a ซึ่งเป็นประเภทข้อมูล int

การแปลงตัวละครเป็น Int

ลองพิจารณาตัวอย่างการเพิ่มอักขระที่ถอดรหัสใน ASCII ด้วยจำนวนเต็ม:

#include <stdio.h>
main() {
   int  number = 1;
   char character = 'k'; /*ASCII value is 107 */
   int sum;
   sum = number + character;
   printf("Value of sum : %d\n", sum );
}

Output:

 Value of sum : 108

ที่นี่ คอมไพเลอร์จะทำการเลื่อนระดับจำนวนเต็มโดยการแปลงค่าของ 'k' เป็น ASCII ก่อนที่จะดำเนินการบวกจริง

ลำดับชั้นการแปลงทางคณิตศาสตร์

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

การหล่อประเภทโดยนัย
ลำดับชั้นการแปลงทางคณิตศาสตร์

พิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจแนวคิด:

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

Output:

 sum = 120.000000

ก่อนอื่น ตัวแปร c จะถูกแปลงเป็นจำนวนเต็ม แต่คอมไพเลอร์จะแปลง NUM และ c ลงใน "ลอย" และเพิ่มเพื่อสร้างผลลัพธ์ 'ลอย'

ประเด็นสำคัญเกี่ยวกับ Conversion โดยนัย

  • การแปลงประเภทโดยนัยเรียกอีกอย่างว่าการแปลงประเภทมาตรฐาน เราไม่จำเป็นต้องมีคำสำคัญหรือข้อความพิเศษใด ๆ ในการคัดเลือกประเภทโดยนัย
  • การแปลงจากชนิดข้อมูลที่เล็กลงเป็นชนิดข้อมูลที่ใหญ่ขึ้นจะเรียกว่าเป็น ประเภทการส่งเสริมการขายในตัวอย่างข้างต้น เราสามารถพูดได้ว่าค่าของ s ได้รับการส่งเสริมให้เป็นชนิดจำนวนเต็ม
  • การแปลงประเภทโดยนัยจะเกิดขึ้นกับประเภทข้อมูลที่เข้ากันได้เสมอ

เราไม่สามารถดำเนินการหล่อประเภทโดยนัยกับประเภทข้อมูลที่เข้ากันไม่ได้เช่น:

  1. การแปลง float เป็น int จะตัดทอนส่วนที่เป็นเศษส่วนจึงสูญเสียความหมายของค่า
  2. การแปลงเลขคู่เป็นเลขลอยตัวจะปัดเศษตัวเลข
  3. การแปลง long int เป็น int จะทำให้บิตลำดับสูงเกินไปลดลง

ในกรณีทั้งหมดข้างต้น เมื่อเราแปลงชนิดข้อมูล ค่าจะสูญเสียความหมาย โดยทั่วไป การสูญเสียความหมายของค่าจะถูกเตือนโดยคอมไพเลอร์

การเขียนโปรแกรม 'ซี' ให้วิธีการพิมพ์อีกวิธีหนึ่งซึ่งเป็นการหล่อประเภทที่ชัดเจน

การหล่อประเภทที่ชัดเจน

ในการแปลงประเภทโดยปริยาย ประเภทข้อมูลจะถูกแปลงโดยอัตโนมัติ มีบางสถานการณ์ที่เราอาจต้องบังคับแปลงประเภท สมมติว่าเรามีตัวแปร div ที่จัดเก็บการแบ่งตัวดำเนินการสองตัวซึ่งประกาศเป็นประเภทข้อมูล int

 int result, var1=10, var2=3;
result=var1/var2;

ในกรณีนี้ หลังจากทำการหารตัวแปร var1 และ var2 แล้ว ผลลัพธ์ที่เก็บไว้ในตัวแปร "result" จะอยู่ในรูปแบบจำนวนเต็ม เมื่อใดก็ตามที่เกิดเหตุการณ์นี้ขึ้น ค่าที่เก็บไว้ในตัวแปร "result" จะสูญเสียความหมาย เนื่องจากตัวแปรไม่ได้คำนึงถึงเศษส่วนที่ปกติจะได้จากการหารตัวเลขสองตัว

เพื่อบังคับให้มีการแปลงประเภทในสถานการณ์เช่นนี้ เราใช้การคัดเลือกประเภทที่ชัดเจน

จำเป็นต้องใช้ตัวดำเนินการการหล่อประเภท รูปแบบทั่วไปของการดำเนินการหล่อประเภทมีดังนี้:

(type-name) expression

ที่นี่

  • ชื่อประเภทคือประเภทข้อมูลภาษา 'C' มาตรฐาน
  • นิพจน์อาจเป็นค่าคงที่ ตัวแปร หรือนิพจน์จริงก็ได้

ให้เราเขียนโปรแกรมเพื่อสาธิตวิธีการพิมพ์ดีดในภาษา C ด้วยการพิมพ์ที่ชัดเจน

#include<stdio.h>
int main()
{
	float a = 1.2;
	//int b  = a; //Compiler will throw an error for this
	int b = (int)a + 1;
	printf("Value of a is %f\n", a);
	printf("Value of b is %d\n",b);
	return 0;
}

Output:

Value of a is 1.200000
Value of b is 2

การหล่อประเภทที่ชัดเจน

  1. เราได้เริ่มต้นตัวแปร 'a' ประเภท float แล้ว
  2. ต่อไป เรามีตัวแปร 'b' อีกตัวที่เป็นประเภทข้อมูลจำนวนเต็ม เนื่องจากตัวแปร 'a' และ 'b' เป็นประเภทข้อมูลที่แตกต่างกัน 'C' จะไม่อนุญาตให้ใช้นิพจน์ดังกล่าว และจะทำให้เกิดข้อผิดพลาด ใน 'C' บางเวอร์ชัน นิพจน์จะถูกประเมินแต่ผลลัพธ์ไม่เป็นที่ต้องการ
  3. เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว เราได้พิมพ์ตัวแปร 'a' ของประเภท float ด้วยการใช้วิธีการหล่อประเภทที่ชัดเจน เราได้แปลงจำนวนทศนิยมเป็นจำนวนเต็มประเภทข้อมูลได้สำเร็จ
  4. เราได้พิมพ์ค่า 'a' ซึ่งยังคงเป็นค่าลอยตัว
  5. หลังจากพิมพ์ดีดแล้ว ผลลัพธ์จะเป็นจำนวนเต็ม 'b' เสมอ

ด้วยวิธีนี้ เราสามารถใช้การคัดเลือกประเภทที่ชัดเจนในการเขียนโปรแกรม C ได้

สรุป

  • การพิมพ์ดีดเรียกอีกอย่างว่าการแปลงประเภท
  • มันหมายถึงการแปลงประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่ง
  • การแปลงประเภทข้อมูลขนาดเล็กให้เป็นประเภทข้อมูลขนาดใหญ่เรียกอีกอย่างหนึ่งว่าการส่งเสริมประเภท
  • การแปลงประเภทมีสองประเภท: การแปลงประเภทโดยนัยและชัดเจนในภาษาซี
  • การแปลงประเภทโดยนัยจะทำงานโดยอัตโนมัติเมื่อพบประเภทข้อมูลที่เข้ากันได้
  • การแปลงประเภทอย่างชัดเจนต้องใช้ตัวดำเนินการแปลงประเภท

โปรดจำกฎต่อไปนี้ไว้สำหรับการฝึกการเขียนโปรแกรมเมื่อต้องจัดการกับชนิดข้อมูลที่แตกต่างกันเพื่อป้องกันข้อมูลสูญหาย:

  • ควรแปลงประเภทจำนวนเต็มเป็นแบบทศนิยม
  • ชนิดลูกลอยควรแปลงเป็นแบบคู่
  • ประเภทอักขระควรแปลงเป็นจำนวนเต็ม

จดหมายข่าว Guru99 รายวัน

เริ่มต้นวันใหม่ของคุณด้วยข่าวสาร AI ล่าสุดและสำคัญที่สุดที่ส่งมอบทันที