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