Apa Typecasting di C?
Typecasting mengubah satu tipe data menjadi tipe lainnya. Ini juga disebut sebagai konversi data atau konversi tipe. Ini adalah salah satu konsep penting yang diperkenalkan dalam pemrograman 'C'.
Pemrograman 'C' menyediakan dua jenis operasi pengecoran tipe:
- Pengecoran tipe implisit
- Pengecoran tipe eksplisit
Pengecoran tipe implisit
Pengecoran tipe implisit berarti konversi tipe data tanpa kehilangan arti aslinya. Jenis typecasting ini penting ketika Anda ingin mengubah tipe data tanpa mengubah signifikansi nilai yang disimpan di dalam variabel.
Jenis konversi implisit terjadi secara otomatis saat nilai disalin ke tipe datanya yang kompatibel. Selama konversi, aturan ketat untuk konversi tipe diterapkan. Jika operan terdiri dari dua tipe data yang berbeda, maka operan yang memiliki tipe data lebih rendah secara otomatis diubah menjadi tipe data yang lebih tinggi. Jenis konversi jenis ini dapat dilihat pada contoh berikut.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Keluaran
1010
- Dalam contoh yang diberikan, kami telah mendeklarasikan variabel tipe data pendek dengan nilai diinisialisasi sebagai 10.
- Pada baris kedua, kami telah mendeklarasikan variabel dari tipe data int.
- Pada baris ketiga, kami telah menetapkan nilai variabel s ke variabel a. Pada baris ketiga konversi tipe implisit dilakukan karena nilai dari variabel s yang merupakan tipe data pendek disalin ke variabel a yang merupakan tipe data int.
Mengubah Karakter menjadi Int
Pertimbangkan contoh menambahkan karakter yang diterjemahkan dalam ASCII dengan integer:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Keluaran:
Value of sum : 108
Di sini, compiler telah melakukan promosi integer dengan mengubah nilai 'k' menjadi ASCII sebelum melakukan operasi penjumlahan yang sebenarnya.
Hierarki Konversi Aritmatika
Kompiler pertama melanjutkan dengan mempromosikan karakter menjadi integer. Jika operand masih memiliki tipe data yang berbeda, maka operand akan dikonversi ke tipe data tertinggi yang muncul di bagan hierarki berikut:
Perhatikan contoh berikut untuk memahami konsepnya:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Keluaran:
sum = 120.000000
Pertama-tama, variabel c diubah menjadi integer, tetapi compiler mengubah num dan c menjadi "float" dan menambahkannya untuk menghasilkan hasil 'float'.
Poin Penting tentang Konversi Implisit
- Jenis konversi tersirat juga disebut sebagai konversi jenis standar. Kami tidak memerlukan kata kunci atau pernyataan khusus dalam pengecoran tipe implisit.
- Mengonversi dari tipe data yang lebih kecil menjadi tipe data yang lebih besar juga disebut sebagai promosi tipe . Dalam contoh di atas, kita juga dapat mengatakan bahwa nilai s dipromosikan ke tipe integer.
- Jenis konversi implisit selalu terjadi dengan tipe data yang kompatibel.
Kami tidak dapat melakukan transmisi tipe implisit pada tipe data yang tidak kompatibel satu sama lain seperti:
- Mengubah float menjadi int akan memotong bagian pecahan sehingga kehilangan arti nilainya.
- Mengubah double menjadi float akan membulatkan digitnya.
- Mengonversi long int ke int akan menyebabkan jatuhnya bit orde tinggi berlebih.
Dalam semua kasus di atas, saat kami mengonversi tipe data, nilainya akan kehilangan artinya. Umumnya, hilangnya makna nilai diperingatkan oleh compiler.
Pemrograman 'C' menyediakan cara lain untuk typecasting yaitu casting tipe eksplisit.
Pengecoran tipe eksplisit
Dalam konversi tipe implisit, tipe data diubah secara otomatis. Ada beberapa skenario di mana kami mungkin harus memaksa konversi tipe. Misalkan kita memiliki div variabel yang menyimpan pembagian dua operan yang dideklarasikan sebagai tipe data int.
int result, var1=10, var2=3;result=var1/var2;
Dalam hal ini, setelah pembagian dilakukan pada variabel var1 dan var2 hasil yang disimpan dalam variabel "result" akan berformat integer. Setiap kali ini terjadi, nilai yang disimpan dalam variabel "result" kehilangan maknanya karena tidak mempertimbangkan bagian pecahan yang biasanya diperoleh dalam pembagian dua bilangan.
Untuk memaksa konversi tipe dalam situasi seperti itu, kami menggunakan transmisi tipe eksplisit.
Ini membutuhkan operator pengecoran tipe. Sintaks umum untuk operasi pengecoran tipe adalah sebagai berikut:
(type-name) expression
Sini,
- Nama tipe adalah tipe data bahasa 'C' standar.
- Ekspresi dapat berupa konstanta, variabel, atau ekspresi aktual.
Mari kita tulis program untuk mendemonstrasikan implementasi pengecoran tipe eksplisit di 'C'.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Keluaran:
Value of a is 1.200000Value of b is 2
- Kami telah menginisialisasi variabel 'a' tipe float.
- Selanjutnya, kami memiliki variabel lain 'b' dari tipe data integer. Karena variabel 'a' dan 'b' memiliki tipe data yang berbeda, 'C' tidak akan mengizinkan penggunaan ekspresi seperti itu dan itu akan menimbulkan kesalahan. Dalam beberapa versi 'C', ekspresi akan dievaluasi tetapi hasilnya tidak diinginkan.
- Untuk menghindari situasi seperti itu, kami memiliki typecast variabel 'a' tipe float. Dengan menggunakan metode pengecoran tipe eksplisit, kami telah berhasil mengubah float menjadi integer tipe data.
- Kami telah mencetak nilai 'a' yang masih berupa float
- Setelah typecasting, hasilnya akan selalu berupa bilangan bulat 'b.'
Dengan cara ini, kita dapat mengimplementasikan casting tipe eksplisit dalam pemrograman 'C'.
Ringkasan
- Typecasting juga disebut sebagai konversi tipe
- Ini berarti mengubah satu tipe data menjadi yang lain.
- Mengubah tipe data yang lebih kecil menjadi yang lebih besar juga disebut sebagai promosi tipe.
- 'C' menyediakan cara konversi tipe yang tersirat dan eksplisit.
- Jenis konversi implisit beroperasi secara otomatis saat jenis data yang kompatibel ditemukan.
- Konversi tipe eksplisit membutuhkan operator tipe casting.
Ingatlah aturan berikut untuk praktik pemrograman saat berhadapan dengan tipe data yang berbeda untuk mencegah kehilangan data:
- Jenis bilangan bulat harus diubah menjadi float.
- Jenis float harus diubah menjadi double.
- Jenis karakter harus diubah menjadi bilangan bulat.