Senin, November 25, 2019

Operator Precedence dan Asosiatifitas Bahasa C

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

operator precedence pada bahasa C
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".

operator asosiatifitas pada bahasa C
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

penggunaan operator precedence dan asosiatifitas pada bahasa C
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/modulusleft-to-right
+  –Addition/subtractionleft-to-right
<<  >>Bitwise shift left, Bitwise shift rightleft-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 toleft-to-right
&Bitwise ANDleft-to-right
^Bitwise exclusive ORleft-to-right
|Bitwise inclusive ORleft-to-right
&&Logical ANDleft-to-right
| |Logical ORleft-to-right
? :Ternary conditionalright-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.





Related Posts

Operator Precedence dan Asosiatifitas Bahasa C
Oleh

mohon untuk melakukan koreksi jika terdapat kesalahan pada penulisan blog ini,