Operator precedence (pendahulu) menentukan operator mana yang dieksekusi terlebih dahulu dalam sebuah ekspresi dengan lebih dari satu operator precedence yang berbeda.
Contoh:
10 + 20 * 30
10 + 20 * 30 diselesaikan dengan operasi 10 + (20 * 30)
dan tidak dengan operasi berikut (10 + 20) * 30
Operator asosiatifitas digunakan ketika dua operator dari precedence sama muncul dalam satu buat ekspresi. Hubungan asosiatifitas dapat dilakukan dari kiri ke kanan atau kanan ke kiri.
Contoh: '*' dan '/' memiliki precedence sama dan asosiatifitasnya adalah kiri ke kanan. sehingga ekspresi "100 / 10 * 10" adalah "(100 / 10) * 10".
Operator precedence dan asosiatif adalah dua karakteristik dari operator yang menentukan evaluasi dari subekspresi karena tidak menggunakan tanda kurung pada persamaan operasi matematika.
Contoh:
100 + 200 / 10 - 3 * 10
satu, Operator asosiatifitas hanya digunakan ketika terdapat dua atau lebih operator pada precedence yang sama.
Point yang perlu dicatat adalah asosiatifitas tidak mendefinisikan urutan operand dari sebuah operator tunggal yang dievaluasi. Contoh, perhatikan program berikut ini, asosiatifitas dari operator + adalah kiri ke kanan, tetapi bukan berarti f1() akan selalu dipanggil sebelum f2(). Output dari program bergantung pada kompilator.
dua, Semua operator dengan precedence sama memiliki asosiatifitas yang sama.
Hal ini sangat penting, jika tidak, tidak ada cara bagi kompilator untuk menentukan perintah evaluasi dari ekspresi yang memiliki dua operator dari precedence sama dan asosiatifitas berbeda. Contoh + dan - memiliki asosiatifitas yang sama.
tiga, Precedence dan asosiatifitas dari postfix ++ dan prefix ++ adalah berbeda.
Precedence dari postfix ++ adalah lebih dari prefix ++, tingkat asosiatifitasnya juga berbeda. Asosiatifitas postfix ++ adalah dari kiri ke kanan dan asosiatifitas dari prefix ++ adalah dari kanan ke kiri.
empat, Tanda koma memiliki precedence yang kecil diantara semua operator dan harus digunakan secara hati-hati. Contoh, perhatikan bentuk program berikut ini;
lima, Tidak ada rantai pembanding operator pada bahasa C
pada Python, bentuk ekspresi seperti "c > b > a" adalah sama seperti "c >b dan b > a", tetapi tipe seperti ini tidak ada pada bahasa C. Contoh perhatikan program berikut. Output dari program adalah false.
Tabel precedence dan asosiatifitas
Adalah suatu hal baik jika programmer bisa pengetahui tingkat precedence dan asosiatifitas operator, tetapi hal yang lebih baik adalah dengan menggunakan tanda kurung, khususnya untuk jenis operator yang jarang digunakan. Penggunaan tanda kurung meningkatkan kemampuan membaca kode program jika tidak bisa diketahui tingkat precedence atau asosiatifitas dari operator.
Contoh:
10 + 20 * 30
![]() |
Gambar 1 operator precedence pada bahasa C |
10 + 20 * 30 diselesaikan dengan operasi 10 + (20 * 30)
dan tidak dengan operasi berikut (10 + 20) * 30
Operator asosiatifitas digunakan ketika dua operator dari precedence sama muncul dalam satu buat ekspresi. Hubungan asosiatifitas dapat dilakukan dari kiri ke kanan atau kanan ke kiri.
Contoh: '*' dan '/' memiliki precedence sama dan asosiatifitasnya adalah kiri ke kanan. sehingga ekspresi "100 / 10 * 10" adalah "(100 / 10) * 10".
![]() |
Gambar 2 operator asosiatifitas pada bahasa C |
Operator precedence dan asosiatif adalah dua karakteristik dari operator yang menentukan evaluasi dari subekspresi karena tidak menggunakan tanda kurung pada persamaan operasi matematika.
Contoh:
100 + 200 / 10 - 3 * 10
![]() |
Gambar 3 operator precedence dan asosiatifitas pada bahasa C |
satu, Operator asosiatifitas hanya digunakan ketika terdapat dua atau lebih operator pada precedence yang sama.
Point yang perlu dicatat adalah asosiatifitas tidak mendefinisikan urutan operand dari sebuah operator tunggal yang dievaluasi. Contoh, perhatikan program berikut ini, asosiatifitas dari operator + adalah kiri ke kanan, tetapi bukan berarti f1() akan selalu dipanggil sebelum f2(). Output dari program bergantung pada kompilator.
dua, Semua operator dengan precedence sama memiliki asosiatifitas yang sama.
Hal ini sangat penting, jika tidak, tidak ada cara bagi kompilator untuk menentukan perintah evaluasi dari ekspresi yang memiliki dua operator dari precedence sama dan asosiatifitas berbeda. Contoh + dan - memiliki asosiatifitas yang sama.
tiga, Precedence dan asosiatifitas dari postfix ++ dan prefix ++ adalah berbeda.
Precedence dari postfix ++ adalah lebih dari prefix ++, tingkat asosiatifitasnya juga berbeda. Asosiatifitas postfix ++ adalah dari kiri ke kanan dan asosiatifitas dari prefix ++ adalah dari kanan ke kiri.
empat, Tanda koma memiliki precedence yang kecil diantara semua operator dan harus digunakan secara hati-hati. Contoh, perhatikan bentuk program berikut ini;
lima, Tidak ada rantai pembanding operator pada bahasa C
pada Python, bentuk ekspresi seperti "c > b > a" adalah sama seperti "c >b dan b > a", tetapi tipe seperti ini tidak ada pada bahasa C. Contoh perhatikan program berikut. Output dari program adalah false.
Tabel precedence dan asosiatifitas
OPERATOR
| DESCRIPTION |
ASSOCIATIVITY
|
---|---|---|
( ) [ ] . -> ++ — | Parentheses (function call) (see Note 1) Brackets (array subscript) Member selection via object name Member selection via pointer Postfix increment/decrement (see Note 2) |
left-to-right
|
++ — + – ! ~ (type) * & sizeof | Prefix increment/decrement Unary plus/minus Logical negation/bitwise complement Cast (convert value to temporary value of type) Dereference Address (of operand) Determine size in bytes on this implementation | right-to-left |
* / % | Multiplication/division/modulus | left-to-right |
+ – | Addition/subtraction | left-to-right |
<< >> | Bitwise shift left, Bitwise shift right | left-to-right |
< <= > >= | Relational less than/less than or equal to Relational greater than/greater than or equal to | left-to-right |
== != | Relational is equal to/is not equal to | left-to-right |
& | Bitwise AND | left-to-right |
^ | Bitwise exclusive OR | left-to-right |
| | Bitwise inclusive OR | left-to-right |
&& | Logical AND | left-to-right |
| | | Logical OR | left-to-right |
? : | Ternary conditional | right-to-left |
= += -= *= /= %= &= ^= |= <<= >>= | Assignment Addition/subtraction assignment Multiplication/division assignment Modulus/bitwise AND assignment Bitwise exclusive/inclusive OR assignment Bitwise shift left/right assignment | right-to-left |
,
| Comma (separate expressions) | left-to-right |
Adalah suatu hal baik jika programmer bisa pengetahui tingkat precedence dan asosiatifitas operator, tetapi hal yang lebih baik adalah dengan menggunakan tanda kurung, khususnya untuk jenis operator yang jarang digunakan. Penggunaan tanda kurung meningkatkan kemampuan membaca kode program jika tidak bisa diketahui tingkat precedence atau asosiatifitas dari operator.
Tidak ada komentar:
Posting Komentar
Respon komentar 7 x 24 jam, so please be patient :D