Pemrograman C: Menguasai Type Casting & Konversi
Mengonversi satu tipe data ke tipe lain dikenal sebagai type casting atau konversi tipe. Misalnya, jika Anda ingin menyimpan nilai 'long' ke dalam integer sederhana, maka Anda dapat type cast 'long' ke 'int'. Anda dapat mengonversi nilai dari satu tipe ke tipe lain secara eksplisit menggunakan cast operator sebagai berikut −
(type_name) expression
Pertimbangkan contoh berikut di mana cast operator menyebabkan pembagian satu variabel integer oleh variabel lain dilakukan sebagai operasi floating-point −
Live Demo
#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Nilai mean : %f\n", mean ); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Nilai mean : 3.400000
Perlu diperhatikan di sini bahwa cast operator memiliki prioritas atas pembagian, sehingga nilai sum dikonversi ke tipe double terlebih dahulu dan akhirnya dibagi oleh count menghasilkan nilai double.
Konversi tipe dapat bersifat implisit yang dilakukan secara otomatis oleh kompiler, atau dapat ditentukan secara eksplisit melalui penggunaan cast operator. Sama-sama dianggap sebagai praktik pemrograman yang baik untuk menggunakan cast operator setiap kali konversi tipe diperlukan.
Integer Promotion
Integer promotion adalah proses yang nilai-nilai tipe integer yang "lebih kecil" dari int atau unsigned int dikonversi menjadi int atau unsigned int. Pertimbangkan contoh penambahan karakter dengan integer −
Live Demo
#include <stdio.h> main() { int i = 17; char c = 'c'; /* nilai ascii adalah 99 */ int sum; sum = i + c; printf("Nilai sum : %d\n", sum ); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Nilai sum : 116
Di sini, nilai sum adalah 116 karena kompiler melakukan integer promotion dan mengonversi nilai 'c' ke ASCII sebelum melakukan operasi penambahan sebenarnya.
Usual Arithmetic Conversion
Usual arithmetic conversions dilakukan secara implisit untuk mencasting nilai mereka ke tipe umum. Kompiler pertama-tama melakukan integer promotion; jika operand masih memiliki tipe yang berbeda, maka mereka dikonversi ke tipe yang muncul tertinggi dalam hierarki berikut −
Usual arithmetic conversions tidak dilakukan untuk operator penugasan, maupun untuk operator logika && dan ||. Mari kita ambil contoh berikut untuk memahami konsep ini −
Live Demo
#include <stdio.h> main() { int i = 17; char c = 'c'; /* nilai ascii adalah 99 */ float sum; sum = i + c; printf("Nilai sum : %f\n", sum ); } Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Nilai sum : 116.000000
Di sini, mudah untuk memahami bahwa pertama c dikonversi menjadi integer, tetapi karena nilai akhirnya adalah double, usual arithmetic conversion berlaku dan kompiler mengonversi i dan c menjadi 'float' dan menambahkan mereka menghasilkan hasil 'float'.