Monday, December 26, 2016

Bab 2. Soal & Penyelesaian Java



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