Perbedaan Type dalam Expression

4.10 Perbedaan Type dalam Expression

Operator, variabel, dan literal adalah elemen-elemen sebuah expression. Dalam sebuah expression kita diperbolehkan mencampuradukkan type asalkan mereka kompatibel. Contohnya int dengan double dapat berada di dalam suatu expression. Jika terdapat lebih dari dua type dalam suatu expression, maka akan terjadi pengkonversian nilai operand secara otomatis dengan aturan sebagai berikut:

1. Kalau salah satu operand adalah decimal, maka operand lain akan diubah menjadi decimal (jika operand lain adalah float atau double maka program tidak bisa dicompile).

2. Jika tidak, kalau salah satu operand adalah double, maka operand lain akan diubah menjadi double.

3. Jika tidak, kalau salah satu operand adalah float, maka operand lain akan diubah menjadi float.

4. Jika tidak, kalau salah satu operand adalah ulong, maka operand lain akan diubah menjadi ulong (jika operand lain adalah sbyte, short, int, atau long maka

program tidak bisa dicompile).

5. Jika tidak, kalau salah satu operand adalah long, maka operand lain akan diubah menjadi long.

6. Jika tidak, kalau salah satu operand adalah uint dan operand lainnya adalah sbyte, short, atau int, maka kedua operand akan diubah menjadi long.

7. Jika tidak, kalau salah satu operand adalah uint, maka operand lain akan diubah menjadi uint

8. Jika tidak, Kedua operand akan diubah menjadi int.

Konversi tersebut akan dilakukan operasi per operasi. Untuk mencampur type yang tidak kompatibel dalam suate expression (misalnya antara double dan decimal), cast dapat dipakai.

Lalu perhatikan aturan terakhir. Berdasarkan aturan tersebut, operand char, byte, sbyte, short, dan ushort akan diubah menjadi int. Karena itu hasil terkecil dari sebuah

expression pastilah int. Ini membutuhkan cast di beberapa situasi, contohnya pada kutipan program berikut:

[kutipan program] byt e a = 1; byt e b = 2; by t e c = ( by t e) ( a + b) ;

[/kutipan program]

a dan b sama-sama berupa byte, namun dalam expression a + b keduanya akan diubah menjadi int. Karena c adalah byte, maka cast untuk mengembalikan a + b dari int menjadi byte diperlukan. Tanda kurung pada (a + b) diperlukan sebab tanpa tanda kurung tersebut yang dicast menjadi byte hanyalah variabel a (yang memang sudah byte).

Untuk mengakhiri subbab ini penulis akan memberikan suatu program lagi:

[program lengkap] / / Pr ogr am 4.12 - Cast int ke double

using Syst em ;

class I nt KeDouble {

st at ic v oid Main( )

{ int j eruk = 20; int anak = 9; Console. Wr it eLine( “ Jer uk unt uk t iap anak : ” ) ; Console. Wr it eLine( ( double) j er u k / an ak) ;

} } [/program lengkap]

Output:

[console] Jer uk unt uk t iap anak :

[/console]

Jika kita menuliskannya berbeda...

[kutipan program] Console. Wr it eLine( ( double) ( j er uk / anak ) ) ; [/kutipan program]

... maka hasilnya akan berbeda. Kenapa? Jika kita mengurung jeruk / anak, maka jeruk / anak akan dihitung terlebih

dahulu. Karena jeruk dan anak sama-sama int maka hasilnya adalah int (2). Selanjutnya 2 dicast ke double, hasilnya tetap saja 2 (walaupun typenya menjadi double).

Sebaliknya, tanpa kurung antara jeruk / anak, maka nilai jeruk akan dicast menjadi double. Karena salah satu operand pembagian tersebut adalah double, maka nilai dari anak secara otomatis akan dikonversi menjadi double, dan hasil pembagiannya juga double (2.22222222222222).

[catatan] Konversi otomatis dapat terjadi jika kita menggunakan operator unary -. Operand yang lebih kecil dari int (byte, sbyte, short, ushort, dan char) akan diubah ke int. uint akan diubah menjadi long. [/catatan]

[latihan mini] • Deteksi hal yang tidak diperlukan dalam kutipan program berikut ini:

[kutipan program] int int 1 = 100, int 2; char ch1 = ‘a’, ch2; int 2 = ( int ) ch1; ch2 = ( char ) int 1; [/kutipan program]

• Apakah type terkecil yang mungkin dari hasil operasi yang melibatkan integer? • Apakah type dari hasil perhitungan berikut: (byte) 100 / 2.5?

• Pada statement ke 3, kita sebenarnya tidak perlu melakukan cast manual. char akan otomatis terkonversi menjadi int.

• int. • Hasilnya adalah double. [/latihan mini]