Konversi Tipe Data dalam C: Konversi Implisit & Eksplisit

⚡ Ringkasan Cerdas

Konversi tipe data dalam C mengubah satu tipe data menjadi tipe data lain, baik secara implisit ketika kompiler secara otomatis mempromosikan tipe yang lebih kecil dan kompatibel, atau secara eksplisit ketika seorang programmer memaksa konversi dengan operator cast untuk mengontrol presisi dan mencegah hasil yang tidak terduga.

  • 🔄 Dua bentuk: Konversi tipe implisit berjalan secara otomatis; konversi tipe eksplisit ditulis dengan operator konversi.
  • ️ Jenis promosi: Mengonversi tipe data yang lebih kecil ke tipe data yang lebih besar dan kompatibel, seperti dari short ke int, akan mempertahankan nilainya.
  • ️ Risiko kehilangan data: Konversi tipe data yang lebih sederhana seperti float ke int menghilangkan pecahan dan kehilangan maknanya.
  • 🎯 Sintaks eksplisit: Menulis ekspresi (type-name) akan memaksa konversi, seperti mengubah operan integer menjadi float.
  • 🤖 Bantuan AI: Asisten AI dan GitHub Copilot menyusun ekspresi pemeran dan menandai konversi penyempitan yang berisiko.

Pencetakan Huruf C

Apa itu Typecasting di C?

Typecasting adalah mengubah satu tipe data menjadi tipe data lainnya. Ini juga disebut sebagai konversi data atau konversi tipe dalam bahasa C. 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

Konversi tipe implisit berarti konversi tipe data tanpa kehilangan makna aslinya. Jenis konversi tipe ini sangat penting ketika Anda ingin mengubah tipe data tanpa mengubah arti dari nilai yang tersimpan di dalamnya. variabel.

Konversi tipe implisit dalam C terjadi secara otomatis saat suatu nilai disalin ke tipe data yang kompatibel. Selama konversi, aturan ketat untuk konversi tipe diterapkan. Jika operan memiliki dua tipe data yang berbeda, maka operan yang memiliki tipe data lebih rendah secara otomatis dikonversi ke tipe data yang lebih tinggi. Jenis konversi tipe ini dapat dilihat pada contoh berikut.

#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);
}

Keluaran:

10
10

Pengecoran tipe implisit

  1. Dalam contoh yang diberikan, kami telah mendeklarasikan variabel bertipe data pendek dengan nilai yang diinisialisasi 10.
  2. Pada baris kedua, kita telah mendeklarasikan variabel bertipe data int.
  3. Pada baris ketiga, kita telah menetapkan nilai variabel s ke variabel a. Pada baris ketiga, konversi tipe implisit dilakukan saat nilai dari variabel s yang bertipe data pendek disalin ke variabel a yang bertipe data int.

Mengubah Karakter menjadi Int

Perhatikan contoh menambahkan karakter yang didekodekan dalam ASCII dengan bilangan bulat:

#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 );
}

Keluaran:

 Value of sum : 108

Di sini, kompiler telah melakukan promosi integer dengan mengonversi nilai 'k' ke ASCII sebelum melakukan operasi penjumlahan sebenarnya.

Hirarki Konversi Aritmatika

Kompiler terlebih dahulu melanjutkan dengan mengubah karakter menjadi integer. Jika operan masih memiliki tipe data yang berbeda, maka operan tersebut diubah ke tipe data tertinggi yang muncul dalam bagan hierarki berikut:

Hirarki Konversi Aritmatika

Perhatikan contoh berikut untuk memahami konsepnya:

#include <stdio.h>
main() {
   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 dikonversi menjadi bilangan bulat, tetapi kompiler mengkonversi num dan c menjadi "float" dan menjumlahkannya untuk menghasilkan hasil 'float'.

Poin Penting tentang Konversi Implisit

  • Konversi tipe tipe implisit juga disebut sebagai konversi tipe standar. Kami tidak memerlukan kata kunci atau pernyataan khusus apa pun dalam casting tipe implisit.
  • Konversi dari tipe data yang lebih kecil ke 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.
  • Konversi tipe implisit selalu terjadi dengan tipe data yang kompatibel.

Kami tidak dapat melakukan casting tipe implisit pada tipe data yang tidak kompatibel satu sama lain seperti:

  1. Mengubah float menjadi int akan memotong bagian pecahan sehingga kehilangan arti nilainya.
  2. Mengubah double menjadi float akan membulatkan angka-angkanya.
  3. Mengonversi bilangan bulat panjang ke bilangan bulat akan menyebabkan penurunan nilai.ping dari kelebihan bit orde tinggi.

Dalam semua kasus di atas, saat kita mengonversi tipe data, nilainya akan kehilangan maknanya. Umumnya, hilangnya makna nilai diperingatkan oleh kompiler.

Pemrograman 'C' menyediakan cara lain untuk melakukan typecasting yaitu casting tipe eksplisit.

Pengecoran tipe eksplisit

Dalam konversi tipe implisit, tipe data dikonversi secara otomatis. Ada beberapa skenario di mana kita mungkin harus memaksakan konversi tipe. Misalkan kita mempunyai variabel div yang menyimpan pembagian dua operan yang dideklarasikan sebagai tipe data int.

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

Dalam hal ini, setelah dilakukan pembagian pada variabel var1 dan var2 maka hasil yang disimpan pada variabel “hasil” akan berformat integer. Bila hal ini terjadi, nilai yang disimpan dalam variabel “hasil” kehilangan maknanya karena tidak memperhitungkan bagian pecahan yang biasanya diperoleh dari pembagian dua bilangan.

Untuk memaksa konversi tipe dalam situasi seperti itu, kami menggunakan casting tipe eksplisit.

Ini membutuhkan operator pengecoran tipe. Sintaks umum untuk operasi pengecoran tipe adalah sebagai berikut:

(type-name) expression

Di sini,

  • Nama tipenya adalah tipe data bahasa 'C' standar.
  • Ekspresi dapat berupa konstanta, variabel, atau ekspresi aktual.

Mari kita menulis sebuah program untuk mendemonstrasikan cara mengetik di C dengan pengecoran tipe eksplisit.

#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;
}

Keluaran:

Value of a is 1.200000
Value of b is 2

Pengecoran tipe eksplisit

  1. Kami telah menginisialisasi variabel 'a' bertipe float.
  2. Selanjutnya, kita memiliki variabel lain 'b' dengan tipe data integer. Karena variabel 'a' dan 'b' memiliki tipe data yang berbeda, 'C' tidak akan mengizinkan penggunaan ekspresi tersebut dan akan menimbulkan kesalahan. Dalam beberapa versi 'C', ekspresi tersebut akan dievaluasi tetapi hasilnya tidak sesuai harapan.
  3. Untuk menghindari situasi seperti itu, kita telah mengetikkan variabel 'a' dengan tipe float. Dengan menggunakan metode casting tipe eksplisit, kami telah berhasil mengubah float menjadi tipe data integer.
  4. Kami telah mencetak nilai 'a' yang masih mengambang
  5. Setelah mengetik, hasilnya akan selalu berupa bilangan bulat 'b'.

Dengan cara ini, kita dapat mengimplementasikan casting tipe eksplisit dalam pemrograman C.

Pertanyaan Umum Demo Slot

Konversi tipe adalah perubahan otomatis yang dilakukan oleh kompiler; pengubahan tipe (type casting) adalah perubahan eksplisit yang Anda minta dengan operator cast. Pengubahan tipe adalah salah satu bentuk konversi.

Bisa. Konversi float ke int memotong pecahan, double ke float membulatkan digit, dan long ke int menghilangkan bit urutan tinggi. Konversi yang melebar tetap aman.

Ya. C memungkinkan Anda untuk melakukan casting dari satu tipe pointer ke tipe pointer lain, dan pointer objek dapat dikonversi ke void* dan sebaliknya. Melakukan dereferensi pada pointer yang di-casting secara tidak kompatibel akan menyebabkan perilaku yang tidak terdefinisi.

C hanya memiliki konversi nilai (tipe) gaya C. C++ menambahkan empat casting bernama yang lebih aman — static_cast, dynamic_cast, const_cast, dan reinterpret_cast — dengan tujuan yang lebih jelas dan diperiksa oleh kompiler.

Nilai tersebut hanya menyimpan bit urutan rendahnya. Jika terlalu besar, hasilnya akan terbungkus atau berubah tanda, jadi periksa dulu apakah nilainya sesuai dengan rentang target.

Utamakan konversi tipe data yang melebar, pastikan nilai sesuai sebelum mempersempit konversi, dan konversikan salah satu operand ke float sebelum pembagian bilangan bulat. Aktifkan peringatan kompiler untuk menandai konversi yang berisiko.

Ya. Asisten AI menulis ekspresi konversi tipe data dari sebuah perintah, menjelaskan aturan konversi, dan memperingatkan jika konversi dapat menyebabkan kehilangan data. Selalu kompilasi dan uji hasilnya.

Kopilot GitHub Menyarankan ekspresi konversi tipe implisit dan eksplisit dari sebuah komentar, termasuk sintaks (nama-tipe). RevPeriksa setiap saran untuk kemungkinan kehilangan data sebelum Anda mengkompilasi.

Ringkaslah postingan ini dengan: