2
Operator
Java
menyediakan lingkungan yang kaya akan operator. Operator-operator Java dapat
dikelompokkan menjadi beberapa kelompok: aritmatik, bitwise, relasional, dan
logikal. Java juga menyediakan beberapa operator lain yang bisa dipakai untuk
menangani situasi-situasi tertentu. Bab ini akan menjelaskan semua operator
Java, kecuali operator perbandingan, instanceof,
lewat soal dan penyelesaian yang diberikan.
Operator-Operator
Aritmatik
Operator-operator
aritmatik dipakai dalam ekspresi-ekspresi matematik, seperti pada aljabar.
Tabel berikut merangkum semua operator aritmatik.
Operator
|
Penjelasan
|
+
|
Penjumlahan
|
-
|
Pengurangan
|
*
|
Perkalian
|
/
|
Pembagian
|
%
|
Modulus
|
++
|
Inkremen
|
+=
|
Penugasan penjumlahan
|
-=
|
Penugasan pengurangan
|
*=
|
Penugasan perkalian
|
/=
|
Penugasan pembagian
|
%=
|
Penugasan modulus
|
--
|
Dekremen
|
Tiap operand dari operator-operator aritmatik harus bertipe numerik. Anda
tidak dapat menerapkannya terhadap tipe-tipe boolean, tetapi Anda dapat menerapkannya terhadap tipe-tipe char,
karena tipe char pada Java adalah
subhimpunan dari int.
Soal dan Penyelesaian
1.
Tunjukkan sebuah
program sederhana yang mendemonstrasikan operator-operator aritmatik. Program
tersebut juga perlu mengilustrasikan perbedaan antara pembagian
titik-mengambang dan pembagian integer.
Penyelesaian
// Mendemonstrasikan operator-operator dasar aritmatik.
class MatDasar {
public static void main(String args[]) {
// aritmatik menggunakan
integer
System.out.println("Aritmatik Integer Arithmetic");
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);
// aritmatik menggunakan
double
System.out.println("\nAritmatik Titik Mengambang");
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);
}
}
Keluaran Program
Aritmatik Integer
a = 2
b = 6
c = 1
d = -1
e = 1
Aritmatik Titik Mengambang
da = 2.0
db = 6.0
dc = 1.5
dd = -0.5
de = 0.5
2. Tunjukkan suatu program yang memuat sebuah
operator modulus, %, yang
menghasilkan sisa dari operasi pembagian. Program juga harus bisa diterapkan
terhadap tipe titik-mengambang.
Penyelesaian
// Mendemonstrasikan operator %.
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);
}
}
Keluaran Program
x mod 10 = 2
y mod 10 = 2.25
3.
Berikan
suatu program Java yang dapat dipakai untuk mengkombinasikan operasi aritmatik
dengan operasi penugasan.
Penyelesaian
Stamen berikut banyak
dijumpai pada pemrograman:
a = a +5;
Dalam Java, Anda
dapat menuliskan statemen ini menjadi:
a += 5;
Versi tersebut
menggunakan operator penugasan gabungan +=. Berikut adalah contoh lain:
a = a % 2;
yang dapat
diekspresikan sebagai
a %= 2;
Pada kasus ini, %= menghasilkan sisa dari a/2 dan menempatkan hasilnya
kembali pada a. Jadi, sembarang statemen dengan format
var = var
op ekspresi;
dapat dituliskan
menjadi
var op=
ekspresi;
Berikut diberikan
suatu program untuk mengilustrasikan operasi penugasan gabungan.
// Mendemonstrasikan beberapa operasi penugasan gabungan.
class OpGabungan {
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 Program
a = 6
b = 8
c = 3
4.
Berikan
suatu program untuk mengilustrasikan operator inkremen.
Penyelesaian
Operator inkremen menambahkan satu pada operandnya. Operator dekremen
mengurangi satu dari operandnya. Sebagai contoh, statemen ini:
x = x + 1;
dapat dituliskan-ulang menggunakan operator inkremen:
x++;
Sama halnya, statemen ini:
x = x - 1;
dapat dituliskan-ulang menggunakan operator inkremen:
x--;
Berikut diberikan suatu program untuk mengilustrasikan operator inkremen.
// Demonstrate ++.
class OpInk {
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
a = 2
b = 3
c = 4
d = 1
5.
Berikan
satu lagi program untuk mengilustrasikan operasi inkremen dan dekremen.
Penyelesaian
public class
OpInkDek {
public static void main(String[] args) {
char c = 'R';
byte j = 127;
short k = 32767;
System.out.println("c= " + c);
++c;
System.out.println("c = " + c);
++c;
System.out .println("c = " + c);
System.out.println("j = " + j);
--j;
System.out.println("j = " + j);
++j;
System.out.println("j = " + j);
System.out.println("k = " + k);
k -= 4 ;
System.out.println("k = " + k);
k += 5;
System.out.println("k = "+ k);
}
}
Keluaran Program
j = 127
j = 126
j = 127
k = 32767
k = 32763
k = -32768
Operator-Operator
Bitwise
Java mendefinisikan beberapa operator bitwise yang dapat diterapkan pada
tipe-tipe integer seperti long, int, short, char, dan byte. Semua operator ini berperan
terhadap bit-bit individual dari operand-operandnya.
Operator
|
Penjelasan
|
~
|
Bitwise unary NOT
|
&
|
Bitwise AND
|
|
|
Bitwise OR
|
^
|
Bitwise XOR
|
>>
|
Geser kanan
|
>>>
|
Geser kanan dengan pengganjalan nol
|
<<
|
Geser kiri
|
&=
|
Penugasan bitwise AND
|
|=
|
Penugasan bitwise OR
|
^=
|
Penugasan bitwise XOR
|
>>=
|
Penugasan geser kanan
|
>>>=
|
Penugasan geser kanan dengan pengganjalan nol
|
<<=
|
Penugasan geser kiri
|
Berikut diberikan tabel kebenaran untuk operator &, |, ^, dan ~.
Bitwise NOT
Juga dikenal dengan bitwise
complement atau operator NOT unary. Operator ini menginversi semua bit dari
operandnya. Sebagai contoh, nilai 42 (desimal), memiliki pola bit:
00101010
menjadi
11010101
setelah operator NOT diterapkan.
Bitwise AND
Operator AND, &, menghasilkan bit 1 jika kedua operandnya juga
bernilai 1. Bit 0 dihasilkan untuk kasus-kasus lain. Berikut adalah contohnya.
Bitwise OR
Operator OR, |, mengkombinasikan bit-bit sehingga jika terdapat sedikitnya
salah satu bit operand bernilai 1, maka bit yang dihasilkan adalah 1, seperti
ditunjukkan di sini:
Bitwise XOR
Operator XOR, ^, mengkombinasikan bit-bit sehingga jika hanya dan hanya
satu bit operand bernilai 1, maka bit hasil adalah 1. Selain itu, bit hasil
adalah 0. Berikut diberikan suatu contoh penggunaan operator XOR.
Soal dan
Penyelesaian
6.
Berikan
satu program untuk mengilustrasikan penggunaan dari operator &, |, ^, dan ~.
Penyelesaian
// Mendemonstrasikan operator-operator bitwise.
class LogikaBit {
public static void main(String args[]) {
String biner[] = {
"0000", "0001", "0010",
"0011", "0100", "0101", "0110",
"0111",
"1000", "1001", "1010",
"1011", "1100", "1101", "1110",
"1111"
};
int a = 3; // 0 + 2 + 1 atau 0011 dalam biner
int b = 6; // 4 + 2 + 0 atau 0110 dalam biner
int c = a | b;
int d = a & b;
int e = a ^ b;
int f = (~a & b) | (a & ~b);
int g = ~a & 0x0f;
System.out.println(" a = " + biner[a]);
System.out.println(" b = " + biner[b]);
System.out.println(" a|b = " + biner[c]);
System.out.println(" a&b = " + biner[d]);
System.out.println(" a^b = " + biner[e]);
System.out.println(" ~a&b|a&~b = " + biner[f]);
System.out.println(" ~a = " + biner[g]);
}
}
Keluaran Program
b = 0110
a|b = 0111
a&b = 0010
a^b = 0101
~a&b|a&~b = 0101
~a = 1100
7.
Lakukan
penggeseran kiri sejauh 2 bit terhadap suatu nilai bertipe byte dan berikan program untuk membuktikannya.
Penyelesaian
// Penggeseran kiri suatu nilai byte.
class GeserKiri {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Nilai awal dari a: " + a);
System.out.println("i dan b: " + i + " " +
b);
}
}
Keluaran Program
Nilai awal dari a: 64
i dan b: 256 0
Karena a dipromosikan menjadi int
untuk tujuan evaluasi, penggeseran-kiri atas nilai 64 (0100 0000) sejauh 2 bit
menyebabkan i memuat nilai 256 (1
0000 0000). Namun, nilai di dalam b
memuat 0 karena setalah penggeseran, byte orde-rendah (delapan bit terakhir)
sekarang nol.
Karena setiap penggeseran kiri memiliki efek penggandaan nilai awal, para
programer sering menggunakan teknik ini sebagai alternatif dalam operasi
pengalian 2. Tetapi Anda perlu hati-hati. Jika Anda menggeser sebuah bit 1 ke
posisi orde-tinggi (bit ke 31 atau bit ke 63), nilai yang dihasilkan menjadi
negatif. Contoh berikut akan mengilustrasikan hal ini.
8.
Tunjukkan
suatu program yang membuktikan bahwa penggeseran bit ke kiri bisa dijadikan
cara alternatif dalam mengalikan dengan dua.
Penyelesaian
// Penggeseran kiri sebagai cara cepat untuk mengalikan dengan 2.
class PerkalianDua {
public static void main(String args[]) {
int i;
int angka = 0xFFFFFFE;
for(i=0; i<4; i++) {
angka = angka <<
1;
System.out.println(angka);
}
}
}
Keluaran Program
536870908
1073741816
2147483632
-32
9.
Berikan
contoh program untuk mengilustrasikan contoh penggunaan operasi penggeseran
kanan.
Penyelesaian
// Contoh penggunaan operasi penggeseran bit ke kanan.
class PenggeseranKanan {
static public void main(String args[]) {
char hex[] = {
'0', '1', '2', '3', '4',
'5', '6', '7',
'8', '9', 'a', 'b', 'c',
'd', 'e', 'f'
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" + hex[(b >> 4) &
0x0f] + hex[b & 0x0f]);
}
}
Keluaran Program
b = 0xf1
10.
Berikan
contoh program untuk mengilustrasikan contoh penggunaan operasi penggeseran
kanan dengan pengganjalan nol (penggeseran tak-bertanda).
Penyelesaian
// Penggeseran tak-bertanda atas sebuah nilai byte.
class PenggeseranUnsigned {
static public void main(String args[]) {
char hex[] = {
'0', '1', '2', '3', '4',
'5', '6', '7',
'8', '9', 'a', 'b', 'c',
'd', 'e', 'f'
};
byte b = (byte) 0xf1;
byte c = (byte) (b
>> 4);
byte d = (byte) (b
>>> 4);
byte e = (byte) ((b
& 0xff) >> 4);
System.out.println(" b = 0x"
+ hex[(b >> 4)
& 0x0f] + hex[b & 0x0f]);
System.out.println(" b >> 4 = 0x"
+ hex[(c >> 4)
& 0x0f] + hex[c & 0x0f]);
System.out.println(" b >>> 4 = 0x"
+ hex[(d >> 4)
& 0x0f] + hex[d & 0x0f]);
System.out.println(" (b & 0xff) >> 4 = 0x"
+ hex[(e >> 4)
& 0x0f] + hex[e & 0x0f]);
}
}
Keluaran Program
b = 0xf1
b >> 4 = 0xff
b >>> 4 = 0xff
(b & 0xff) >> 4 = 0x0f
11.
Ujilah
sebuah program yang menciptakan beberapa variabel integer dan kemudian
menggunakan beberapa penugasan operator bitwise untuk memanipulasi
variabel-variabel tersebut.
Penyelesaian
class PenugasanBitwise {
public static void main(String args[]) {
int a = 1;
int b = 2;
int c = 3;
a |= 4;
b >>= 1;
c <<= 1;
a ^= c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
Keluaran Program
a = 3
b = 1
c = 6
Operator-Operator
Relasional
Operator-operator relasional menentukan relasi satu operand dengan operand
lainnya. Operator ini biasanya dipakai untuk menentukan ekualitas dan
pengurutan. Tabel berikut mencantumkan operator-operator relasional dalam Java.
Operator
|
Penjelasan
|
==
|
Sama dengan
|
!=
|
Tidak sama dengan
|
<
|
Kurang dari
|
>
|
Lebih dari
|
<=
|
Kurang dari atau sama dengan
|
>=
|
Lebih dari atau sama dengan
|
Operator-Operator
Logikal Boolean
Operator-operator logikal Boolean yang ditampilkan di sini hanya bisa
diterapkan terhadap operand-operand boolean.
Setiap operator logikal biner mengkombinasikan dua nilai boolean untuk menghasilkan suatu nilai boolean.
Operator
|
Penjelasan
|
&
|
AND logikal
|
|
|
OR logikal
|
^
|
XOR logikal
|
||
|
OR short-circuit
|
&&
|
AND short-circuit
|
!
|
NOT logikal
|
&=
|
Penugasan AND
|
|=
|
Penugasan OR
|
^=
|
Penugasan XOR
|
==
|
Sama dengan
|
!=
|
Tidak sama dengan
|
?:
|
If-then-else
|
Tabel berikut menunjukkan efek dari penggunaan tiap operasi logikal.
Soal dan
Penyelesaian
12.
Berikan
suatu program untuk mendemonstrasikan penggunaan tiap operasi logikal pada
nilai-nilai boolean.
Penyelesaian
// Mendemonstrasikan operator-operator logika bool.
class LogikaBool {
public static void main(String args[]) {
boolean a = true;
boolean b = false;
boolean c = a | b;
boolean d = a & b;
boolean e = a ^ b;
boolean f = (!a & b) | (a & !b);
boolean g = !a;
System.out.println(" a = " + a);
System.out.println(" b = " + b);
System.out.println(" a|b = " + c);
System.out.println(" a&b = " + d);
System.out.println(" a^b = " + e);
System.out.println(" !a&b|a&!b = " + f);
System.out.println(" !a = " + g);
}
}
Keluaran Program
b = false
a|b = true
a&b = false
a^b = true
!a&b|a&!b = true
!a
= false
No comments:
Post a Comment