Monday, March 12, 2018

3. Operator



Java menyediakan banyak operator. Sebagian besar operatornya dapat dapat dibagi ke dalam empat kelompok: aritmatika, bitwise, relasional, dan logikal. Java juga mendefinisikan beberapa operator lain yang khusus menangani kondisi tertentu. Bab ini akan merangkum semua operator Java kecuali operator pembandingan tipe data instanceof, yang akan diberikan nanti pada buku ini.


Operator Aritmatika
Operator-operator aritmatika dipakai pada ekspresi matematis dengan cara yang sama ketika digunakan pada aljabar. Tabel berikut mencantumkan semua operator aritmatika.

Operator
Hasil
+
Penjumlahan
-
Pengurangan
*
Perkalian
/
Pembagian
%
Modulus
++
Inkremen
--
Dekremen
++
Penugasan penjumlahan
-=
Penugasan pengurangan
*=
Penugasan perkalian
/=
Penugasan pembagian
%=
Penugasan modulus


Operand-operand dari operator aritmatika harus bertipe data numerik. Anda tidak bisa menggunakan tipe data boolean, tetapi Anda dapat menggunakan tipe data char, karena char dalam Java sebenarnya adalah subhimpunan dari int.


Operator Aritmatika Dasar
Operasi-operasi aritmatika dasar: penjumlahan, pengurangan, perkalian, dan pembagian, semuanya berperilaku seperti apa yang ada pada aljabar. Operator unary minus menegasikan operand tunggalnya. Operator unary plus hanya menghasilkan nilai dari operandnya. Ingat bahwa ketika operator pembagian diterapkan pada tipe data integer, maka tidak akan dihasilkan komponen pecahan pada hasil.

Program sederhana berikut mendemonstrasikan operator-operator aritmatika. Program ini juga mengilustrasikan perbedaan antara pembagian titik-mengambang dengan pembagian integer.

//Mendemonstrasikan operator-operator dasar aritmatika
public class DasarMatematika {
   public static void main(String args[]) {
      // aritmatika menggunakan operand integer
      System.out.println("Aritmatika Integer");
      int a = 1 + 1;
      int b = a * 3;
      int c = b / 4;
      int d = c - a;
      int e = -d;
      System.out.println("a = " + a);
      System.out.println("b = " + b);
      System.out.println("c = " + c);
      System.out.println("d = " + d);
      System.out.println("e = " + e);
  
      // aritmatika menggunakan operand double
      System.out.println("\nAritmatika Double");
      double da = 1 + 1;
      double db = da * 3;
      double dc = db / 4;
      double dd = dc - a;
      double de = -dd;
      System.out.println("da = " + da);
      System.out.println("db = " + db);
      System.out.println("dc = " + dc);
      System.out.println("dd = " + dd);
      System.out.println("de = " + de);
   }
}

Ketika Anda menjalankan program ini, Anda akan melihat keluaran berikut:

Aritmatika Integer
a = 2
b = 6
c = 1
d = -1
e = 1

Aritmatika Double
da = 2.0
db = 6.0
dc = 1.5
dd = -0.5
de = 0.5


Operator Modulus
Operator modulus, %, menghasilkan sisa dari sebuah operasi pembagian. Operator ini dapat diterapkan pada tipe data titik-mengambang maupun pada tipe data integer. Program contoh berikut mendemonstrasikan %:

//Mendemonstrasikan operator modulus
public class Modulus {
   public static void main(String args[]) {
      int x = 42;
      double y = 42.25;
  
      System.out.println("x mod 10 = " + x % 10);
      System.out.println("y mod 10 = " + y % 10);
   }
}

Ketika Anda menjalankan program ini, Anda akan melihat keluaran berikut:

x mod 10 = 2
y mod 10 = 2.25


Operator Penugasan Gabungan Aritmatika
Java menyediakan operator-operator spesial yang dapat dipakai untuk menggabungkan atau mengkombinasikan operasi aritmatika dengan operasi penugasan. Seperti yang Anda mungkin ketahui, statemen berikut cukup umum dijumpai pada pemrograman:

a = a + 4;

Dalam Java, Anda dapat menulis statemen di atas menjadi seperti ini:

a += 4;

Versi ini menggunakan operator penugasan gabungan +=. Kedua statemen di atas melakukan pekerjaan yang sama: menambahkan 4 pada nilai dari a.

Ini adalah contoh lainnya:

a = a % 2;

yang dapat diekspresikan dengan:

a %= 2;

Pada kasus ini, %= mendapatkan sisa dari a/2 dan memberikan hasilnya kembali kepada a.
Ada sejumlah operator penugasan gabungan untuk semua operator aritmatika dan operator biner. Jadi, sembarang statemen dengan bentuk berikut:

var = var op ekspresi;

dapat dituliskan sebagai:

var op= ekspresi;

Operator-operator penugasan gabungan memberikan dua keuntungan. Pertama, menghemat waktu Anda dalam mengetik, karena operator penugasan gabungan merupakan versi ringkas dari bentuk panjangnya. Kedua, pada beberapa kasus operator penugasan gabungan lebih efisien dari bentuk panjangnya. Karena alas an ini, Anda akan lebih sering melihat operator penugasan gabungan pada program-program Java yang ditulis secara professional.

Berikut adalah program contoh sederhana yang menunjukkan bagaimana penugasan-penugasan op= digunakan:

//Mendemonstrasikan sejumlah operasi penugasan gabungan
public class OpSamaDengan {
   public static void main(String args[]) {
      int a = 1;
      int b = 2;
      int c = 3;
  
      a += 5;
      b *= 4;
      c += a * b;
      c %= 6;
  
      System.out.println("a = " + a);
      System.out.println("b = " + b);
      System.out.println("c = " + c);
   }
}

Keluaran dari program ini ditampilkan berikut:

a = 6
b = 8
c = 3


Inkremen dan Dekremen
Operator inkremen dan dekremen pada Java adalah ++ dan --. Kedua jenis operator ini telah dijelaskan pada Bab 1. Di sini keduanya akan dibahas secara detil. Seperti yang akan Anda lihat, kedua operator ini memiliki watak spesial yang membuatnya menarik untuk dibahas.

Operator inkremen menambahkan 1 pada operandnya. Operator dekremen sebaliknya mengurangkan 1 dari operandnya. Sebagai contoh, statemen ini:

x = x + 1;

dapat dituliskan menggunakan operator inkremen:

x++

Sama halnya, statemen ini:

x = x  1;

ekivalen dengan:

x--;

Operator-operator ini unik dimana kedua jenis operator ini memiliki bentuk postifks, dimana operator inkremen dan dekremen ditempatkan setelah operand seperti yang telah ditunjukkan, dan bentuk prefiks, dimana operator inkremen dan dekremen ditempatkan sebelum operand. Namun, ketika operator inkremen dan/atau operator dekremen menjadi bagian dari sebuah ekspresi yang lebih besar, perbedaan dari kedua bentuk ini menjadi semakin nyata.

Pada bentuk prefiks, operand diinkremen atau didekremen sebelum nilainya diperoleh untuk digunakan pada ekspresi. Pada bentuk postfiks, nilai lama diambil untuk digunakan pada ekspresi. Sebagai contoh:

x = 42;
y = ++x;

Pada kasus ini, y ditugasi nilai 43 seperti dugaan Anda, karena inkremen terjadi sebelum x ditugaskan kepada y. Jadi, baris y = ++x; ekivalen dengan kedua statemen berikut:

x = x + 1;
y = x;

Namun, ketika dituliskan seperti ini:

x = 42;
y = x++;

nilai dari x diperoleh lebih dahulu sebelum operator inkremen dieksekusi, jadi nilai dari y menjadi 42. Tentu, pada kedua kasus x menjadi 43. Di sini, baris y = x++; ekivalen dengan kedua statemen berikut:

y = x;
x = x + 1;

Program berikut mendemonstrasikan operator inkremen:

//Mendemonstrasikan operator inkremen
public class InkDek {
   public static void main(String args[]) {
      int a = 1;
      int b = 2;
      int c;
      int d;
  
      c = ++b;
      d = a++;
      c++;
  
      System.out.println("a = " + a);
      System.out.println("b = " + b);
      System.out.println("c = " + c);
      System.out.println("d = " + d);
   }
}

Keluaran program adalah berikut:

a = 2
b = 3
c = 4
d = 1


Operator Bitwise
Java mendefinisikan sejumlah operator bitwise yang dapat diterapkan pada tipe data integer: long, int, short, char, dan byte. Operator-operator bitwise ini diterapkan pada bit-bit dari operand-operandnya. Perhatikan tabel berikut:

Operator
Hasil
~
NOT
&
AND
|
OR
^
XOR
>> 
Geser kanan
>>> 
Geser kanan dengan pengganjalan nol
<< 
Geser kiri
&=
Penugasan AND
|=
Penugasan OR
^=
Penugasan XOR
>>=
Penugasan geser kanan
>>>=
Penugasan geser kanan dengan pengganjalan nol
<<=
Penugasan geser kiri

Karena operator bitwise memanipulasi bit-bit pada integer, adalah penting untuk memahami dampak manipulasi semacam itu pada sebuah nilai. Anda perlu mengetahui bagaimana Java menyimpan nilai integer dan bagaimana Java merepresentasikan nilai negatif. Jadi, sebelum melanjutkan Anda perlu belajar tentang kedua topic ini lebih dahulu.

Semua tipe integer direpresentasikan oleh bilangan biner dengan lebar bit bervariasi. Sebagai contoh, nilai byte untuk 42 adalah 00101010, dimana setiap posisi merepresentasikan kepangkatan dua, yang dimulai dengan 2^0 pada bit paling kanan. Posisi bit selanjutnya ke arah kiri adalah 2^1 atau 2, yang dilanjutkan kea rah kiri dengan 2^2 atau 4, kemudian 8, 16, 32, dan seterusnya. Jadi 42 memiliki bit 1 pada posisi 1, 3, dan 5 (dimulai dari posisi 0 di sebelah kanan); jadi, 42 adalah penjumlahan atas 2^1 + 2^3 + 2^5, yaitu 2 + 8 + 32.

Semua tipe integer (kecuali char) adalah integer bertanda. Ini berarti bahwa tipe data tersebut dapat merepresentasikan nilai-nilai negatif maupun positif. Java menggunakan teknik pengkodean yang dikenal dengan komplemen dua, yang berarti bahwa nilai negatif direpresentasikan dengan membalikkan (mengubah bit 1 menjadi bit 0 dan sebaliknya) semua bit pada suatu nilai, dan kemudian menambahkan 1 pada hasil. Sebagai contoh, -42 direpresentasikan dengan membalikkan semua bit pada 42 (00101010), yang menghasilkan 11010101, kemudian menambahkan 1, yang menghasilkan 11010110, atau -42. Untuk mendekondekan sebuah nilai negatif, semua bit lebih dahulu dibalikkan, dan kemudian ditambahkan dengan 1. Sebagai contoh, -42, atau 11010110 dibalikkan menjadi 00101001, atau 41, kemudian ditambahkan dengan 1 menjadi 43.

Alasan mengapa Java (dan kebanyakan bahasa pemrograman) menggunakan komplemen dua adalah karena kemudahannya.


Operator Logikal Bitwise
Operator logical bitwise dalam Java adalah &, |, ^, dan ~. Tabel berikut menunjukkan keluaran dari tiap operasi. Anda perlu tetap mengingat bahwa operator bitwise ini diterapkan pada tiap bit secara individual pada tiap operandnya.

A
B
A|B
A&B
A^B
~A
0
0
0
0
0
1
1
0
1
0
1
0
0
1
1
0
1
1
1
1
1
1
0
0


Bitwise NOT
Operator ini juga dikenal dengan komplemen atau operator NOT. Simbol dari operator ini adalah ~, yang membalikkan atau menginversi semua bit dari operandnya. Sebagai contoh, nilai 42, yang memiliki pola bit:

00101010

menjadi

11010101

Setelah operator NOT diterapkan.


Selanjutnya  >>>

No comments: