Friday, 21 October 2016

Assignment Operator

  Operator penugasan (assignment operator) memberikan nilai dari operan di sebelah kanan operator (right-hand) ke penyimpanan yang ditentukan oleh operan di sebelah kiri operator (left-hand). Karena itu left-hand atau yang lebih dikenal sebagai l-value harus berupa nilai yang bisa diubah. Setelah operator penugasan dilakukan, l-value akan mendapatkan nilai dari r-value. Dalam C/C++, operator penugasan diwakili oleh tanda sama dengan (‘ = ’). Bentuk umum dari operator penugasan adalah

nama_variabel = ekspresi;

dimana ekspresi bisa saja berupa konstan tunggal atau serumit yang diperlukan. Target atau bagian kiri harus berupa variabel atau pointer, bukan sebuah fungsi atau konstan. Singkatnya, lvalue (operan di sebelah kiri) berarti objek apapun yang bisa diberikan pernyataan penugasan dan rvalue bisa dianggap sebagai ekspresi di sebelah kanan operator atau merupakan nilai yang akan diberikan ke lvalue. Berikut ini contoh penggunaan operator penugasan.

Konversi Tipe dalam Penugasan

  Ketika suatu variabel bertipe A diberikan nilai bertipe bukan A, konversi tipe akan terjadi. Dalam pernyataan penugasan, aturan konversi tipe sangat sederhana: nilai dari rvalue diubah ke tipe dari lvalue. Perhatikan contoh berikut:

  Di line-1, high-order bit dari variabel intVar terpotong, sehingga nilai yang diberikan ke charVar adalah lower 8 bit yang tersisa. Jika intVar bernilai antara 0 sampai 255, charVar dan intVar akan mempunyai nilai yang sama. Jika tidak, nilai charVar akan sama dengan lower-order bit dari intVar. Di line-2, intVar menerima nilai dari floatVar, karena tipe int tidak mengenal pecahan, maka semua bagian pecahan dari floatVar akan terpotong (tidak ada pembulatan). Di line-3, floatVar mengubah nilai yang tersimpan dalam charVar ke nilai yang sama dalam format floating-point. Ini juga terjadi di line-4.

  Ketika tipe konversi terjadi, jika jumlah bit target (lvalue) lebih kecil dari ukuran bit rvalue, maka akan terjadi penghapusan high-order bit pada rvalue. Misalnya jika dalam suatu lingkungan operasi terjadi konversi dari int yang berukuran 16 bit ke tipe char yang berukuran 8 bit, maka high-order 8 bit (8 bit dari kiri) dari int akan dihapus. Jadi, selama nilai dari rvalue tidak lebih besar dari ukuran lvalue, tidak akan terjadi perubahan yang signifikan. Namun ketika mengkonversi tipe data bilangan ril ke bilangan bulat, misalnya float ke int, maka akan terjadi pemotongan pada bagian desimal (tidak terjadi pembulatan).

lvalue rvalue Kemungkinan data yang hilang
char short int High-order 8 bit
char int (16 bit) High-order 8 bit
char int (32 bit) High-order 24 bit
char long int High-order 24 bit
signed char char Jika nilai > 127, lvalue menjadi negatif
short int int (16 bit) Tidak ada (sama – sama 16 bit)
short int int (32 bit) High-order 16 bit
int (16 bit) long int High-order 16 bit
int (32 bit) long int Tidak ada (sama – sama 32 bit)
Int float Bagian desimal, dan kemungkinan lebih
float double Presisi, hasil dibulatkan
double long double Presisi, hasil dibulatkan

No comments:

Post a Comment