Lompat ke konten Lompat ke sidebar Lompat ke footer

Operator Precedence dan Asosiatifitas Bahasa C dan Fungsinya

Operator precedence seperti diperlihatkan pada gambar 1 adalah bentuk penentuan dari operator mana yang dieksekusi terlebih dahulu dalam sebuah ekspresi dengan lebih dari satu operator precedence yang berbeda dalam basa pemrograman C.

5 Fakta tentang Operator Precedence dan Asosiatifitas pada Bahasa C
Ilustrasi Precedence dan Asosiatifitas Bahasa C

Sebelum memahami materi tentang Operator Precedence dan Asosiatifitas Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Operator Aritmatika Bahasa C dan Fungsinya [klik]Operator Relasi dan Logika Bahasa C dan Fungsinya [klik], dan Operator Bitwise Bahasa C dan Fungsinya [klik].

Contoh: 10 + 20 * 30


10 + 20 * 30 diselesaikan dengan operasi 10 + (20 * 30) dan tidak diperlakukan seperti kondisi operasi berikut (10 + 20) * 30.

Gambar 1 operator precedence pada bahasa C
Gambar 1 operator precedence pada bahasa C

Operator asosiatifitas seperti diperlihatkan pada gambar 2 digunakan ketika dua operator dari precedence yang sama muncul dalam satu buah ekspresi dalam program. Hubungan asosiatifitas dapat dilakukan dari kiri ke kanan (left-to-right) atau kanan ke kiri (right-to-left).

Baca Juga:

Contoh: operator '*' dan '/' memiliki precedence sama dan asosiatifitasnya adalah kiri ke kanan. sehingga ekspresi operasi dari "100 / 10 * 10" adalah "(100 / 10) * 10".

Gambar 2 operator asosiatifitas pada bahasa C
Gambar 2 operator asosiatifitas pada bahasa C

Precedence operator dan asosiatifitasnya 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
Gambar 3 operator precedence dan asosiatifitas pada bahasa C

satu, Asosiatifitas operator hanya digunakan ketika terdapat dua atau lebih operator pada precedence yang sama. Poin yang perlu dicatat adalah asosiatifitas (gambar 3) 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(), dimana Output dari program bergantung pada jenis kompilator yang digunakan.

Contoh:

// Asosiatifitas tidak

// digunakan pada program

// berikut ini.

 

// Output dari kompilator

// masih bersifat dependen

// atau tidak berkaitan satu

// sama lain.

#include <stdio.h>

 

int x = 0;

 

int f1()

{

x = 5;

 

return x;

}

 

int f2()

{

x = 10;

 

return x;

}

 

int main()

{

int p = f1() + f2();

printf("%d ", x);

 

return 0;

}


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, operator "+" dan "-" memiliki asosiatifitas yang sama.

tiga, Precedence dan asosiatifitas dari postfix ++ dan prefix ++ adalah berbedaPrecedence 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.

Contoh:

#include <stdio.h>

 

int main()

{

int a;

a = 1, 2, 3

// Dievaluasi sebagai 

// (a = 1), 2, 3

 

printf("%d", a);

 

return 0;

}


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.

Contoh:

#include <stdio.h>

 

int main()

{

int a = 10, b = 20, c = 30;

 

// (c > b > a) diperlakukan

// sebagai ((c > b) > a),

// tingkat asosiatifitas dari

// '>' adalah left to right. 

 

// Karena itu nilai dari ((30

// > 20) > 10) menjadi (1 >

// 20).

if (c > b > a)

printf("TRUE");

else

printf("FALSE");

 

return 0;

}


Tabel precedence dan asosiatifitas pada bahasa C
OperatorDescriptionAssociativity
( )

[ ]

.

->

++ —
Tanda kurung (panggilan fungsi) (lihat Catatan 1)

Tanda kurung (subskrip array)

Pemilihan anggota melalui nama objek

Pemilihan anggota melalui penunjuk

Kenaikan / penurunan Postfix (lihat Catatan 2)
left-to-right
++ —

+ –

! ~

(type)

*

&

sizeof
Kenaikan / penurunan prefiks

Plus / minus unary

Negasi logis / pelengkap bitwise

Transmisikan (ubah nilai menjadi nilai sementara jenis)

Dereferensi

Alamat (operan)

Tentukan ukuran dalam byte pada implementasi ini
right-to-left
* / %Perkalian / pembagian / modulusleft-to-right
+ –Penjumlahan / penguranganleft-to-right
<< >>Bitwise bergeser ke kiri, Bitwise bergeser ke kananleft-to-right
< <=

> >=
Relasional kurang dari / kurang dari atau sama dengan

Relasional lebih besar dari / lebih besar dari atau sama dengan
left-to-right
== !=Relasional sama dengan / tidak sama denganleft-to-right
&Bitwise ANDleft-to-right
^Bitwise exclusive ORleft-to-right
|Bitwise inclusive ORleft-to-right
&&Logika ANDleft-to-right
| |Logika ORleft-to-right
? :Ternary conditionalright-to-left
=

+= -=

*= /=

%= &=

^= |=

<<= >>=
Penugasan

Penugasan penjumlahan / pengurangan

Penugasan perkalian / pembagian

Modulus / bitwise AND penugasan

Penugasan eksklusif OR / inklusif bitwise

Bitwise pergeseran ke kiri / kanan
right-to-left
,Koma (ekspresi pemisah)left-to-right

Adalah suatu hal baik jika programmer bisa pengetahui tingkat precedence dan asosiatifitas dari jenis operator yang akan dipergunakan pada suatu program yang dibuat, namun jika  tidak demikian akan lebih baik jika menggunakan tanda kurung dalam penggunaan dan pembentukan operator dalam suatu algoritma pemrograman, 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 yang akan digunakan oleh programmer tersebut.

5 komentar untuk "Operator Precedence dan Asosiatifitas Bahasa C dan Fungsinya"

  1. Apa yang dimaksud dengan precedence atau prioritas pada operator yang digunakan dalam bahasa C?

    BalasHapus
    Balasan
    1. Prioritas operator atau precedence operator adalah suatu penentuan pengelompokkan istilah dalam ekspresi dan memustuskan bagaimana ekspresi tersebut akan dievaluasi dalam suatu program. Operator tertentu sudah pasti memiliki precedence yang lebih tinggi daripda operator lainnya. Contoh, operator perkalian memiliki nilai precedence yang lebih tinggi daripada operator penjumlahan dalam bahasa C.

      Hapus
  2. Apa yang dimaksud dengan asosiatifitas operator pada bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Dalam bahasa pemrograman, asosiasi operator merupakan properti yang menentukan bagaimana operator dengan prioritas yang sama dikelompokkan tanpa tanda kurung.

      Hapus
  3. Tingkat asosiatifitas atau associativity operator pada bahasa pemrograman mendefinisikan urutan dimana operator tersebut dengan prioritas yang sama dievaluasi dalam sebuah ekspresi. Asosiatifitas bisa berasal dari kiri ke kanan ataupun juga sebaliknya dari kanan ke kiri dalam suatu urutan. Dalam bahasa C, setiap operator memiliki tingkat prioritas yang bersifat tetap dalam hubungan (asosiatifitasnya) dengan operator lain.

    BalasHapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -