Rabu, November 06, 2019

integer promotion pada bahasa C

Beberapa jenis tipe data seperti char, short int mengalokasikan jumlah byte angka lebih sedikit dari pada tipe data int, tipe data tersebut secara otomatis dipromosikan oleh int atau unsigned int ketika sedang menjalankan operasi didalamnya. Atau lebih akrab dikenal dengan integer promotion. Contohnya, tidak ada kalkulasi aritmatik yang terjadi pada tipe data ukuran kecil seperti char, short, dan enum. Pertama dilakukan konversi menjadi int atau unsigned int, setelah selesai maka proses aritmatik telah selesai. Jika int dapat merepresentasikan segala nilai dari tipe original, maka nilai akan dikonversi menjadi int atau nilai tersebut akan dikonversi ke tipe unsigned int.

Perhatikan contoh program berikut ini:
Output:
120

Jika diperhatikan sekilas, ekspresi (a*b)/c akan membuat proses aritmatika akan menjadi overflow karena karakter signed mendapat nilai hanya dari -128 hingga 127 pada kebanyakan tipe compiler, dan nilai subekspresi '(a*b)' adalah 1200 yang nilainya lebih besar dari 128. Tetapi promosi integer yang terjadi dalam proses perhitungan yang dilakukan pada tipe dan hasil yang didapat, tidak akan menjadi overflow.

Pertimbangkan program untuk contoh lainnya seperti berikut ini:
Output:
a = ?
b = ?
Not Same

Ketika akan mencetak nilai 'a' dan 'b', maka karakter yang sama akan dicetak, tetapi ketika nilainya dibandingkan, maka didapatkan hasil bahwa nilai 'a' dan 'b' tidak sama.

Nilai 'a' dan 'b' memiliki representasi binary yang sama sebagai char. Tetapi ketika operasi perbandingan dilakukan pada 'a' dan 'b', maka nilai keduanya akan dikonversi sebagai int. Nilai 'a' adalah signed char, dan setelah nilai dikonversi sebagai int maka nilainya menjadi -5. 'b' adalah unsigned char, ketika nilainya dikonversi ke int maka akan menjadi 251. Nilai dari -5 dan 251 memiliki representasi berbeda sebagai nilai int, sehingga hasil dari output perbandingan menjadi berbeda.





Related Posts

integer promotion pada bahasa C
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "