Operators and Expressions pada 1-c-programming-language | belajar system-programming | Peskom Guide
Home

Operators and Expressions

Last Updated : 08 January 2025 / 9 min read

Kita sudah melihat apa itu variabel dan konstanta pada modul sebelumnya. Apa yang dimaksud dengan expression (ekspresi) adalah penggabungan antara variabel, konstanta, operator, fungsi, dll untuk menghasilkan suatu nilai.

Kita akan mempelajari tentang function pada modul kedepan. Namun sebelum itu, kita harus tahu terlebih dahulu tentang operator dan jenis-jenisnya yang ada dalam bahasa pemrograman C.

Contoh dari expression paling sederhana adalah a + b , dimana a dan b adalah variabel ( operand ) dan + adalah operator. Operator penjumlahan ini disebut sebagai operator aritmatika ( arithmetic operator ) dalam bahasa C.

Expression ini sendiri bisa terdiri dari beberapa expression lainnya. Contohnya, expression a + b + (c * d) yang terdiri dari a dan b sebagai primary expression dan (c * d) sebagai compound expression lainnya, dimana a + b juga bisa dianggap sebagai compound expression juga.

Jadi kita bisa menganggap kalau operator itu adalah alat yang digunakan untuk membangun expression . Dan terlepas dari operator aritmatika, bahasa C, sama seperti bahasa lain juga memiliki beberapa jenis operator lainnya.

  • arithmetic operators , yang meliputi operator aritmatika seperti tambah, kurang, kali, bagi, dll.
  • relational operators , yang digunakan untuk membandingkan dua nilai, seperti “nilai i lebih besar dari 0”.
  • logical operators , yang digunakan untuk membangun kondisi seperti “Nilai i lebih besar dari 5 tapi lebih kecil dari 10”
  • dll

Masih banyak operator-operator lainnya seperti assignment operators , bitwise operators , pointer operators , dll. Kita akan semakin mengenal banyak operator seiring berjalannya waktu.

Arithmetic Operators

Operator aritmatika yang meliputi operator penjumlahan, pengurangan, perkalian, pembagian, adalah operator yang menjadi dasar dari banyak bahasa pemrograman, termasuk C.

Simple arithmetic operations example
 #include <stdio.h>
 
int main() {
    printf("%d\n", 1 + 2);
    printf("%d\n", 1 - 2);
    printf("%d\n", 1 * 2);
    printf("%d\n", 1 / 2);
    printf("%d\n", 1 % 2);
 
    return 0;
}  

Program diatas akan menghasilkan output sebagai berikut:

Output of simple arithmetic operations example
 3
-1
2
0
1  

Operator % adalah apa yang disebut sebagai modulo operator , yang digunakan untuk menghitung sisa pembagian dari dua bilangan. Dalam kasus diatas, 1 % 2 akan menghasilkan 1 karena sisa pembagian dari 1 / 2 adalah 1 .

Beberapa hal yang perlu kita perhatikan dalam menggunakan operator aritmatika, terutama / dan % adalah:

  • Operator / dapat menghasilkan nilai yang tidak terduga jika kedua operandnya adalah bilangan bulat ( integer ). Dalam contoh diatas, hasil dari 1 / 2 adalah 0 bukan 0.5 . Hal ini dikarenakan bahwa operator / akan menghasilkan nilai integer jika kedua operandnya adalah bilangan bulat yang artinya hasil nilainya akan dibulatkan.
  • Operator % hanya dapat digunakan pada operand yang bertipe bilangan bulat ( integer ).
  • Menggunakan nilai nol sebagai operand dalam operasi / atau % akan menghasilkan error atau nilai yang tidak terduga.

Operator lainnya yang kita gunakan untuk menentukan apakah nilai suatu variabel bersifat positif atau negatif disebut sebagai unary operator .

Unary operator example
 #include <stdio.h>
 
int main() {
    int a = 1;
 
    printf("%d\n", -a);
    printf("%d\n", +a);
 
    return 0;
}  

Program diatas akan menghasilkan output sebagai berikut:

Output of unary operator example
 -1
1  

Hal lain yang perlu diperhatikan adalah apa yang disebut dengan operator precedence . Operator precedence adalah aturan yang menentukan urutan operasi dalam suatu expression . Operator yang memiliki precedence lebih tinggi akan dieksekusi lebih dulu.

Sebagai contoh, jika kita memiliki expression a + b * c , maka operator * akan dieksekusi lebih dulu karena memiliki precedence yang lebih tinggi dibandingkan + . Dalam kasus ini, maka ekspresi b * c akan dieksekusi terlebih dahulu sebelum menambahkan hasilnya dengan a .

Jika kita urutkan operator-operator tersebut berdasarkan precedence , maka akan menjadi seperti ini:

  1. Unary operator seperti - dan + .
  2. Operator * , / , dan % .
  3. Operator + dan - .

Solusi lain untuk menyelesaikan masalah operator precedence adalah dengan menggunakan tanda kurung () untuk memastikan bahwa operasi yang diinginkan dieksekusi terlebih dahulu.

Sebagai contoh, ekspresi (a + b) * c akan dieksekusi sebagai (a + b) terlebih dahulu sebelum dikalikan dengan c .

Jika kita gabungkan semua konsep diatas, maka kita akan mendapatkan:

  • a + b * c akan dieksekusi sebagai a + (b * c) .
  • -a + -b akan dieksekusi sebagai (-a) + (-b) .
  • -a + b * c akan dieksekusi sebagai (-a) + (b * c) .

Assignment Operators

Assignment operator mungkin adalah operator yang paling pertama dan paling kita sering lihat sejak awal. Hampir setiap operasi yang melibatkan variabel, akan ada peran assignment operator disitu. Contoh yang paling simpelnya adalah a = 1 , dimana a adalah variabel dan 1 adalah nilai yang akan diassign ke variabel a .

Assignment operator example
 #include <stdio.h>
 
int main() {
    int a = 1;
    int b = 2 + a;
    int c = 3;
 
    int i = a + b * c; // i = 1 + 3 * 3 = 10
 
    return 0;
}  

Dan jika kita ingin men-assign suatu nilai ke suatu variabel dengan tipe data yang berbeda, maka compiler akan berusaha untuk mengonversikan nilai tersebut sesuai dengan tipe data variabel yang dituju.

Assignment operator with different data type example
 #include <stdio.h>
 
int main() {
    int i = 12;
    i = 14.3; // Assign float to int
 
    printf("%d", i); // Output: 14 (int)
 
    return 0;
}  

Alasan kenapa nilai dari variabel i menjadi 14 adalah karena dalam bahasa pemrograman C, assignment itu merupakan sebuah operator , berbeda dengan bahasa pemrograman lain yang menganggap kalau assignment merupakan sebuah statement .

Operator akan selalu menghasilkan sebuah nilai. Sama seperti penggunaan operator + yang kita gunakan untuk melakukan operasi penjumlahan akan menghasilkan sebuah nilai. Nilai dari proses assignment i = 14.3 adalah hasil dari nilai i setelah dilakukan proses assignment dengan 14.3 .

Kita juga bisa melakukan beberapa assignment secara bersamaan, seperti i = j = k = 1 , yang dapat diartikan sebagai i = (j = (k = 1)) .

Namun perlu diperhatikan juga kalau assignment dengan tipe data yang berbeda disaat yang bersamaan dapat menghasilkan nilai yang tidak terduga.

Assignment with different data type example
 #include <stdio.h>
 
int main() {
    int i;
    float j;
 
    j = i = 1.3;
 
    printf("%.1f", j); // Output: 1.0
 
    return 0;
}  

Hal ini dikarenakan bahwa nilai 1.3 akan dikonversikan menjadi integer terlebih dahulu sebelum dikonversikan lagi menjadi float .

Conversion process
 1.3 -> 1 (integer)
1 -> 1.0 (float)  

Hal terakhir yang perlu kita bahas tentang assignment operator adalah compound assignment operator . Compound assignment operator adalah operator yang digunakan untuk melakukan proses komputasi yang membutuhkan nilai sebelumnya dari variabel tersebut untuk menghasilkan nilai yang baru.

Compound assignment operator example
 #include <stdio.h>
 
int main() {
    int i = 1;
    i = i + 2;
 
    printf("%d", i); // Output: 3
 
    return 0;
}  

Kebanyakan programmer juga akan menggunakan shorthand syntax dalam melakukan proses compound assignment . Sebagai contoh:

Compound assignment operator shorthand syntax example
 #include <stdio.h>
 
int main() {
    int i = 1;
    i += 2; // Sama dengan i = i + 2
 
    printf("%d", i); // Output: 3
 
    return 0;
}  

Disini operator += adalah compound assignment operator yang digunakan untuk menambahkan nilai dari variabel i dengan 2 dan menyimpannya kembali ke variabel i .

Hal serupa juga berlaku untuk operator -= , *= , /= , dan %= .

1 hal penting yang perlu kita perhatikan adalah bahwa i *= 2 + 3 tidaklah sama dengan i = i * 2 + 3 . Hal ini dikarenakan hukum dari operator precedence yang sudah kita bahas sebelumnya.

i *= 2 + 3 akan dieksekusi sebagai i = i * (2 + 3) , yang artinya i = i * 5 . Inilah kenapa penyebutan shorthand syntax sebelumnya mungkin bisa dianggap kurang tepat.

Hal yang sama juga berlaku untuk compound assignment seperti dalam kasus i += j += k yang berarti i = i + (j = j + k) .

Increment and Decrement Operators

Dalam compound assignment kita sudah melihat operator += dan -= . Increment dan decrement operator ini juga dapat digunakan untuk melakukan proses increment dan decrement . Hanya saja, nilai perubahan dari increment dan decrement operator ini adalah 1 .

Increment and decrement operator example
 #include <stdio.h>
 
int main() {
    int a = 10;
    a++;
 
    printf("%d", a); // Output: 11
 
    a--;
    printf("%d", a); // Output: 10
 
    return 0;
}  

Bisa dilihat kalau a++ akan menghasilkan 11 dan a-- akan menghasilkan 10 . Ini berarti bahwa increment dan decrement operator ini akan melakukan perubahan nilai dari variabel tersebut setelah proses increment atau decrement sebesar 1 .

Hal yang perlu diperhatikan adalah, bahwa operator ++ dan -- dapat diletakkan di depan (prefix) atau di belakang (postfix) variabel. Jika diletakkan di depan, maka proses increment atau decrement akan dilakukan sebelum proses assignment dilakukan. Sebaliknya, jika diletakkan di belakang, maka proses increment atau decrement akan dilakukan setelah proses assignment dilakukan.

Prefix and postfix increment and decrement operator example
 #include <stdio.h>
 
int main() {
    int a = 10;
 
    printf("%d\n", ++a); // Output: 11
    printf("%d\n", a++); // Output: 11
    printf("%d\n", a); // Output: 12
 
    return 0;
}  

Sekarang coba perhatikan, kenapa output dari printf("%d\n", a++) adalah 11 bukan 12 ? Hal ini dikarenakan bahwa operator ++ diletakkan di belakang variabel a , yang artinya proses increment akan dilakukan setelah proses assignment dilakukan. Inilah kenapa output dari baris selanutnya adalah 12 , dikarenakan proses increment pada baris sebelumnya telah dilakukan.

Kita bisa mengartikan kalau ++i berarti lakukan increment terhadap variabel i sekarang, sedangkan i++ berarti lakukan increment terhadap variabel i setelah proses assignment dilakukan.

Increment dan decrement operator ini mungkin terlihat tidak berguna dan jarang digunakan. Namun, dalam beberapa kasus, operator ini justru sangat berguna, terutama ketika kita ingin melakukan proses looping atau iteration nantinya.

Apakah konten ini membantu ? Jika ya, kami akan sangat menghargai jika Anda bisa memberikan bintang pada GitHub Repository kami dan ikuti sosial media dari komunitas Peskom di Facebook . Dukungan Anda membantu kami untuk terus berkembang! 🌟

Dan juga jika Anda menemukan kesalahan, typo, kekurangan, atau kesalahan pada artikel ini, kami sangat terbuka untuk masukan. Silakan laporkan temuan Anda melalui halaman Github Issues ini . Mari bersama-sama meningkatkan kualitas konten untuk komunitas Peskom! 🚀

Semoga semangat open source turut senantiasa menyertaimu.