Dalam tutorial ini, kita akan belajar tentang prioritas dan asosiasi operator di C ++ dengan bantuan contoh.
Diutamakan Operator C ++
Jika ada beberapa operator dalam satu ekspresi, operasi tidak dievaluasi secara bersamaan. Sebaliknya, operator dengan prioritas yang lebih tinggi akan dievaluasi operasinya terlebih dahulu.
Mari kita perhatikan contoh:
int x = 5 - 17 * 6;
Di sini, operator perkalian *
lebih diutamakan daripada operator pengurangan -
. Makanya, 17 * 6
dievaluasi dulu.
Hasilnya, persamaan di atas sama dengan
int x = 5 - (17 * 6);
Jika kita ingin mengevaluasi 5 - 17
terlebih dahulu, maka kita harus memasukkannya ke dalam tanda kurung :
int x = (5 - 17) * 6;
Contoh 1: Prioritas Operator
#include using namespace std; int main() ( // evaluates 17 * 6 first int num1 = 5 - 17 * 6; // equivalent expression to num1 int num2 = 5 - (17 * 6); // forcing compiler to evaluate 5 - 17 first int num3 = (5 - 17) * 6; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; )
Keluaran
num1 = -97 num2 = -97 num3 = -72
Catatan: Karena ada banyak operator di C ++ dengan beberapa tingkat prioritas, sangat disarankan agar kami menggunakan tanda kurung agar kode kami lebih mudah dibaca.
Tabel Urutan Operator C ++
Tabel berikut (diambil dari cppreference.com) menunjukkan prioritas operator C ++. Precedence Level 1 menandakan operator dengan prioritas tertinggi, sedangkan Precedence Level 17 menandakan operator dengan prioritas terendah.
Properti asosiatif akan segera dibahas.
Hak lebih tinggi | Operator | Deskripsi | Asosiatif |
---|---|---|---|
1 | :: | Resolusi Lingkup | Kiri ke kanan |
2 | a ++ a-- type () type () a () a () . -> | Peningkatan sufiks / postfix Penurunan sufiks / postfix Fungsi cast Fungsi cast Panggilan fungsi Subscript Akses anggota dari objek Akses anggota dari objek ptr | Kiri ke kanan |
3 | ++ a --a + a -a ! ~ (type) * a & a sizeof co_await new () delete delete () | Prefix increment Prefix decrement Unary plus Unary minus Logical NOT Bitwise NOT C style cast Indirection (dereference) Address-of Size-of await-expression Alokasi memori dinamis Deallocation memori dinamis | Kanan ke kiri |
4 | . * -> * | Pemilih objek anggota Pemilih penunjuk anggota | Kiri ke kanan |
5 | a * b a / b a% b | Modulus Divisi Perkalian | Kiri ke kanan |
6 | a + b a - b | Penambahan Pengurangan | Kiri ke kanan |
7 | << >> | Pergeseran kiri bitwise Pergeseran kanan bitwise | Kiri ke kanan |
8 | <= < | Operator perbandingan tiga arah | Kiri ke kanan |
9 | < <= > > = | Kurang dari Kurang dari atau sama dengan Lebih dari Lebih dari atau sama dengan | Kiri ke kanan |
10 | == ! = | Sama dengan Tidak sama dengan | Kiri ke kanan |
11 | & | Bitwise DAN | Kiri ke kanan |
12 | ^ | Bitwise XOR | Kiri ke kanan |
13 | | | Bitwise ATAU | Kiri ke kanan |
14 | && | DAN logis | Kiri ke kanan |
15 | || | Logis ATAU | Kiri ke kanan |
16 | Sebuah ? b: c melempar co_yield = + = - = * = / = % = << = >> = & = = | = | Ternary Conditional throw operator yield expression (C ++ 20) Assignment Addition Assignment Subtraction Assignment Perkalian Assignment Division Assignment Modulus Assignment Bitwise Shift Left Assignment Bitwise Shift Right Assignment Bitwise AND Assignment Bitwise XOR Assignment Bitwise ATAU Assignment | Kanan ke kiri |
17 | , | Operator koma | Kiri ke kanan |
Asosiasi Operator C ++
Asosiasi operator adalah arah dari mana ekspresi dievaluasi. Sebagai contoh,
int a = 1; int b = 4; // a will be 4 a = b;
Lihatlah a = 4;
pernyataannya. Keterkaitan =
operator adalah dari kanan ke kiri. Oleh karena itu, nilai b ditetapkan ke a, dan bukan ke arah lain.
Selain itu, beberapa operator dapat memiliki tingkat prioritas yang sama (seperti yang dapat kita lihat dari tabel di atas). Saat beberapa operator dengan tingkat prioritas yang sama digunakan dalam ekspresi, mereka dievaluasi sesuai dengan asosiatifnya .
int a = 1; int b = 4; b += a -= 6;
Baik operator +=
maupun -=
operator memiliki prioritas yang sama. Karena asosiasi operator ini dari kanan ke kiri, berikut adalah bagaimana pernyataan terakhir dievaluasi.
a -= 6
dievaluasi terlebih dahulu. Oleh karena itu, a akan menjadi -5- Kemudian
b += -5
akan dievaluasi. Oleh karena itu, b akan menjadi -1
Contoh 2: Asosiasi Operator
#include using namespace std; int main() ( int a = 1; int b = 4; // a -= 6 is evaluated first b += a -= 6; cout << "a = " << a << endl; ; cout << "b = " << b; )
Keluaran
a = -5 b = -1