Dalam tutorial ini kita akan belajar tentang prioritas operator dan asosiatif dalam C #. Ini akan memberi kita gambaran tentang bagaimana ekspresi dievaluasi oleh kompilator C #.
C # Operator Diutamakan
Prioritas operator adalah sekumpulan aturan yang menentukan bagaimana ekspresi dievaluasi. Dalam C #, setiap operator C # memiliki prioritas yang ditetapkan dan berdasarkan prioritas ini, ekspresi dievaluasi.
Misalnya , prioritas (*)
operator perkalian lebih tinggi dari pada (+)
operator penjumlahan . Oleh karena itu, operasi yang melibatkan perkalian dilakukan sebelum penjumlahan.
Perhatikan pernyataan di bawah ini.
int x = 4 + 3 * 5;
Berapa nilai x setelah menjalankan pernyataan ini?
Operand 3
dikaitkan dengan +
dan *
. Seperti yang dinyatakan sebelumnya, perkalian memiliki prioritas yang lebih tinggi daripada penjumlahan. Jadi, operasi 3 * 5
yang dilakukan bukan 4 + 3
. Nilai variabel x akan menjadi 19
.
Jika penjumlahan akan memiliki prioritas yang lebih tinggi, 4 + 3
akan dievaluasi terlebih dahulu dan nilai x akan menjadi 35
.
Tabel Urutan Operator
Semakin tinggi prioritas operator, semakin tinggi tampilannya di tabel
C # Operator DiutamakanKategori | Operator |
---|---|
Increment dan Decrement Postfix | ++, - |
Prefix Increment, Decrement dan Unary | ++, -, +, -,!, ~ |
Perkalian | *, /,% |
Aditif | +, - |
Bergeser | <> |
Relasional | <,,> = |
Persamaan | ==,! = |
Bitwise DAN | & |
Bitwise XOR | ^ |
Bitwise ATAU | | |
DAN logis | && |
Logis ATAU | || |
Ternary | ? : |
Tugas | =, + =, - =, * =, / =,% =, & =, | =, =, <> = |
Operator penugasan memiliki prioritas terendah sedangkan operator kenaikan dan penurunan postfix memiliki prioritas tertinggi.
Contoh 1: Prioritas Operator
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) )
Saat kita menjalankan program, outputnya adalah:
19 Salah
Mari kita pahami bagaimana ekspresi dievaluasi dalam program.
Prioritas --
dan ++
lebih tinggi dari *
, dan prioritas *
lebih tinggi dari -
. Oleh karena itu pernyataannya,
hasil1 = --a * b - ++ c;
setara dengan
hasil1 = ((--a) * b) - (++ c);
Ekspresi di dalam tanda kurung selalu dievaluasi terlebih dahulu, apa pun prioritas operator di luarnya.
- Pada awalnya, (--a) dievaluasi sehingga menjadi
4
. - Kemudian (++ c) dievaluasi sehingga menghasilkan
5
. - Sekarang, (a * b) dievaluasi menghasilkan
24
. - Akhirnya, pengurangan dilakukan menghasilkan
19
. - Oleh karena itu, nilai akhir result1 adalah
19
.
Pada ekspresi berikutnya, prioritas +
lebih tinggi dari >=
. Jadi, c dan a ditambahkan terlebih dahulu dan jumlahnya dibandingkan dengan b untuk menghasilkan false
.
Asosiasi Operator di C #
Pada bagian sebelumnya, kita membahas tentang prioritas operator. Jika digunakan dua operator dengan prioritas berbeda, operator dengan prioritas lebih tinggi dievaluasi terlebih dahulu.
Tetapi bagaimana jika kedua operator memiliki prioritas yang sama?
Dalam kasus seperti itu, ekspresi dievaluasi berdasarkan asosiasi operator (kiri ke kanan atau kanan ke kiri).
Sebagai contoh:
int a = 5, b = 6, c = 3; hasil int = a * b / c;
Di sini, baik *
dan /
memiliki hak yang sama. Tetapi karena asosiasi operator ini dari kiri ke kanan , a * b
dievaluasi terlebih dahulu dan kemudian dilakukan pembagian. Hasil akhir dari ekspresi ini adalah 10
.
Dalam contoh khusus ini, asosiativitas tidak terlalu penting. Karena meskipun pembagian dilakukan sebelum perkalian, hasilnya tidak akan terpengaruh.
Mari kita lihat contoh lainnya.
int a = 5, b = 6, c = 3; a = b = c;
Keterkaitan =
operator adalah dari kanan ke kiri . Jadi nilai dari c (yaitu 3
) ditugaskan ke b, dan kemudian nilai b ditugaskan ke a. Jadi setelah menjalankan pernyataan ini, nilai a, b dan c akan menjadi 3
.
Tabel di bawah ini menunjukkan asosiasi operator C #:
C # Asosiasi operatorKategori | Operator | Asosiatif |
---|---|---|
Increment dan Decrement Postfix | ++, - | Kiri ke kanan |
Prefix Increment, Decrement dan Unary | ++, -, +, -,!, ~ | Kanan ke kiri |
Perkalian | *, /,% | Kiri ke kanan |
Aditif | +, - | Kiri ke kanan |
Bergeser | <> | Kiri ke kanan |
Relasional | <,,> = | Kiri ke kanan |
Persamaan | ==,! = | Kiri ke kanan |
Bitwise DAN | & | Kiri ke kanan |
Bitwise XOR | ^ | Kiri ke kanan |
Bitwise ATAU | | | Kiri ke kanan |
DAN logis | && | Kiri ke kanan |
Logis ATAU | || | Kiri ke kanan |
Ternary | ? : | Kanan ke kiri |
Tugas | =, + =, - =, * =, / =,% =, & =, | =, =, <> = | Kanan ke kiri |
Hampir semua operator memiliki asosiasi dari kiri ke kanan. Operator yang memiliki asosiasi dari kanan ke kiri adalah:
- Operator unary
- Awalan Increment dan Decrement Operator
- Operator Ternary
- Operator Penugasan
Contoh 2: Asosiatif Operator
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) )
Saat kita menjalankan program, outputnya adalah:
10 a = 3, b = 3, c = 3