Ekspresi, Pernyataan & Operasi Aritmetika/Logika Ekspresi (expression) Pernyataan (statements) Operator Penugasan (assignment) Operator Aritmetika Operator Relasional Operator Logika Operator Bitwise 1
Ekspresi (Expression) Segala sesuatu yang menghasilkan nilai (jika dievaluasi, akan menghasilkan nilai) Bisa berupa konstanta literal, variabel, maupun kombinasi keduanya dengan menggunakan operator Contoh: x x = 1 hasil = 1 + 2 1 * 2 * 3 x + y / 100 // ambiguous (x + y) / 100 // unambiguous, recommended 2
Ekspresi Operasi Komponen utama operasi adalah operand dan operator Operand dapat berupa variabel, konstanta, nilai data konstan maupun fungsi. Setiap operand harus memiliki nilai data. Operator adalah simbol yang mengolah nilai pada operand dan menghasilkan satu nilai baru. 3
Pernyataan (Statements) Secara sederhana analogis dengan kalimat dalam bahasa natural. Sebuah pernyataan membentuk unit eksekusi yang komplit (a complete unit of execution), dapat dieksekusi oleh komputer. Ekspresi dapat diubah menjadi pernyataan (sehingga dapat dieksekusi) dengan mengakhiri penulisannya dengan titik koma atau semicolon (;) Contoh: x = 10; y = x + 1; printf( %d, x); x++; Contoh di atas termasuk pernyataan ekspresi (expression statements) 4
Pernyataan (Statements) Selain pernyataan ekspresi, ada macam pernyataan lainnya, yaitu pernyataan deklarasi (declaration statement) dan pernyataan aliran kendali (control flow statement) Contoh pernyataan deklarasi: int x; char ch = A ; float = 3.14; Pernyataan aliran kendali dapat berupa pencabangan bersyarat (selection) atau pengulangan (repetition). Akan dibahas di topik lain kelak. 5
Presedensi & Asosiativitas Presedensi menentukan urutan pengerjaan operator berdasarkan prioritas. Operator yang memiliki tingkat presedensi lebih tinggi akan dikerjakan lebih dahulu. Assosiativitas menentukan urutan pengerjaan operator berdasarkan lokasinya dalam sebuah ekspresi (apakah dari kiri atau dari kanan). 6
Presedensi & Asosiativitas KATEGORI SIMBOL NAMA PRIORITAS URUTAN PENGERJAAN Resolusi Lingkup :: Resolusi Lingkup 1 Kiri-Kanan Kurung, indeks larik dan elemen struktur data Operator Unary () Kurung 2 Kiri-Kanan [] Elemen array Kiri-Kanan -> Pointer ke anggota struktur atau kelas Kiri-Kanan. Anggota struktur, union atau kelas Kiri-Kanan ++ Pre-increment Kanan-Kiri -- Pre-decrement Kanan-Kiri! Logika not Kanan-Kiri ~ Komplemen Bitwise Kanan-Kiri - Unary minus Kanan-Kiri + Unary plus Kanan-Kiri & Alamat 3 Kanan-Kiri * Indirection Kanan-Kiri (type) Type casting Kanan-Kiri sizeof Ukuran tipe data Kanan-Kiri new Ekspresi Pernyataan Alokasi Operasi memori Aritmetika Logika - TIF UB 2010 Kanan-Kiri 7 delete Dealokasi memori Kanan-Kiri
Presedensi & Asosiativitas KATEGORI SIMBOL NAMA PRIORITAS URUTAN PENGERJAAN * Perkalian Operator aritmatika / Pembagian 4 Kiri-Kanan perkalian % Sisa Pembagian + Penambahan Operator penambahan 5 Kiri-Kanan - Pengurangan << Geser Kiri Pergeseran bit 6 Kiri-Kanan >> Geser Kanan < Lebih kecil <= Lebih kecil sama dg Operator Relational 7 Kiri-Kanan > Lebih besar >= Lebih besar sama dg Operator Relational 8 Kiri-Kanan & Bitwise AND 9 Operator Bitwise ^ Bitwise XOR 10 Kiri-Kanan Bitwise OR 11 Operator Logika Kiri-Kanan Operator Ternary?: Operator kondisi 14 Kanan-Kiri == && Sama dengan Logika AND 12!= Tidak sama dengan Logika OR 13 Operator Penugasan Majemuk =, +=, -=, *=, /=, %= &=, ^=, =, <<=, >>= Operator penugasan arithmatika Operator penugasan bitwise 15 Kanan-Kiri Operator koma, Operator Koma 16 Kiri-Kanan 8
Presedensi & Asosiativitas Contoh: x xy xy yz yz Ditulis dalam bhs pemrograman Java: x = (x * y + y * z)/(x * y y * z); 1 2 3 4 5 6 7 8 9
Presedensi & Asosiativitas main () { Scanner input = new Scanner( System.in ); int a, b, z=100; float x, y; System.out.println("Melihat prioritas dan urutan pengerjaan\n\n"); System.out.print("Masukkan sebarang nilai integer: "); a = input.nextint(); x = a/3*3; y = a*3/3; z += b = a; System.out.printf("\n\nx = %d/3*3, diperoleh x = %f\n\n",a,x); System.out.printf("y = %d*3/3, diperoleh y = %f\n\n",a,y); System.out.printf("bila z=100, maka untuk z += b = %d diperoleh z = %d\n\n\n, a,z); } 10
Operator Didasarkan atas jumlah operand, operator dapat dibedakan menjadi tiga jenis, yaitu : Unary operator Binary operator Ternary operator Unary operator memerlukan 1 operand, binary operator memerlukan 2 operand, sedangkan ternary operator memerlukan 3 operand. 11
Operator Berdasarkan jenis operasinya, operator dalam bahasa pemrograman Java dapat dikelompokkan : Operator Penugasan (assignment operator) Operator Logika Operator Aritmatika Operator Relasional Operator Bitwise 12
Operator Penugasan (assignment) Termasuk binary operator Digunakan untuk memberikan nilai kepada suatu operand. Sintaks: operand1 operator operand2; operand1 harus berupa variabel, sedangkan operand2 dapat sembarang operand termasuk variabel dari operand1. Urutan pengerjaan (assosiativitas) operator penugasan dari kanan ke kiri. 13
Operator Penugasan Contoh x = 2; x = y; x = 2 * y; a = sin (y); // konstanta // variabel lain // ekspresi // fungsi Tipe hasil operasi disesuaikan dengan tipe operand sebelah kiri. int x = 7/2; /*nilai x sama dengan 3 */ float y = 3; /*nilai y sama dengan 3.000 */ 14
Operator Aritmetika Digunakan untuk melakukan operasi matematika Simbol Fungsi Contoh + Penambahan x = y + 6; - Pengurangan y = x 5; * Perkalian y = y * 3; / Pembagian z = x/y; % Modulo A = 10 % 3; ++ Increment x++; -- Decrement z--; () Menaikan Priority x=(2+3)*5 15
Operator Aritmetika Modulo: Simbol : % Termasuk Binary operator Untuk menghitung sisa hasil bagi n % 2, dapat digunakan untuk menguji apakah integer n bernilai genap atau ganjil n % 2 = 0 n GENAP n % 2 = 1 n GANJIL Increment dan Decrement: Simbol : ++(increment), --(decrement) Termasuk unary operator Menaikkan (++) dan menurunkan (--) nilai variabel dengan 1 Posisinya bisa di depan (pre) atau dibelakang (post) variabel 16
Operator Aritmatika Contoh: N++; ++N; N--; --N; //post increment //pre increment //post decrement //pre decrement Jika statement increment stand alone. Maka N++; atau ++N; sama artinya N=N+1; Jika statement decrement stand alone. Maka N--; atau -- N; sama artinya N=N-1; 17
Operator Aritmatika Contoh: main () { int x = 44; int y = 44; ++x; System.out.printf( x = %d\n, x);/* hasil 45 */ y++; System.out.printf( y = %d\n, y);/* hasil 45 */ } 18
Operator Aritmetika Jika ++n dan n++ sebagai statement yang terikat dalam ekspresi lainnya (sub expresi), keduanya mempunyai arti yang berbeda. ++n n ditambah 1, baru diproses terhadap ekspresinya n++ n langsung diproses terhadap ekspresinya tanpa ditambah 1 terlebih dahulu, pada saat selesai baru n ditambah 1 main () { int x=44; int y = 44; int a, b; a = ++x; /* a, x nilainya 45 */ b = y++; /* b nilainya 44 dan y nilainya 45 */ } 19
Operator Aritmetika Setiap ekspesi yang berbentuk : <Variabel> = <Variabel> <Operator><Exp>; dapat diganti dengan : <Variabel> <Operator> = <Exp>; Operator ini sering disebut dengan Combined Operator. Ekspresi Dapat diganti dengan a = a + b; a += b; a = a b; a -= b; a = a * b; a *= b; a = a / b; a /= b; a = a % b; a %= b; a = a Ekspresi ^ b Pernyataan ; Operasi Aritmetika Logika - TIF UB a 2010 ^= b; 20
Operator Aritmetika Contoh soal: x *= y +1; artinya sama dengan : A. x = x * (y + 1); B. x = x * y + 1; C. x = x + 1 * y; D. x = (x + 1) * y; Jawab : A 21
Operator Relasional Digunakan untuk membandingkan dua nilai, dan hasilnya TRUE atau FALSE Simbol = = Sama Dengan!= Tidak Sama Dengan < Lebih Kecil Dari > Lebih Besar Dari Fungsi <= Lebih Kecil atau Sama Dengan >= Lebih Besar atau Sama Dengan?: Conditional assignment 22
Operator Relasional TRUE dalam bahasa pemrograman bernilai tidak sama dengan NOL FALSE dalam bahasa pemrograman bernilai sama dengan NOL Sedangkan nilai TRUE yang diset oleh program saat run time bernilai sama dengan 1. Contoh: int x; x = (20 > 10); //nilai x sama dgn 1 x = (20 == 10); //nilai x sama dgn 0 23
Operator Relasional Contoh : main() { int x=5,y=6; if ( x == y) printf("%d sama dengan %d\n",x,y); if ( x!= y) printf("%d tidak sama dengan %d\n",x,y); if ( x < y) printf("%d lebih kecil daripada %d\n",x,y); if ( x > y) printf("%d lebih besar daripada %d\n",x,y); if ( x <= y) printf("%d lebih kecil atau sama dengan %d\n", x,y); if ( x >= y) printf("%d lebih besar atau sama dengan %d\n", x,y); } 24
Ekspresi Kondisional (Conditional Expression) Ekspresi Kondisional menggunakan ternary operator?: Sintaks : exp1? exp2 : exp3; Jika exp1 bernilai true, maka exp2 dieksekusi. Sebaliknya jika exp1 bernilai false, maka exp3 dieksekusi. Contoh yang sama artinya dgn statement diatas: z = (a>b)? a : b; Jika (a>b) bernilai benar maka z=a. Sebaliknya jika (a>b) bernilai salah maka z=b. 25
Ekspresi Kondisional Contoh: main () { int bil, abs; printf("menentukan nilai absolut\n\n"); printf("masukkan bilangan integer: "); scanf("%d",&bil); abs = (bil >= 0)? bil : - bil; printf("nilai absolutnya adalah : %d \n\n",abs); } 26
Operator Logika Digunakan untuk melakukan operasi logika Simbol Fungsi && AND OR! NOT Table Kebenaran operator logika: A B!A A && B A B True True False True True True False False False True False True True False True False False True False False 27
Operator Logika Operand pada operator logika harus mempunyai nilai boolean, yaitu TRUE atau FALSE. Nilai data integer tidak dibolehkan menjadi operand dari operator logika. Contoh: int x=5; int y=0, a, b; a = x && y; b = (x > y) && (y>=0); //ok //error (hasil yg salah) 28
Operator Bitwise Simbol Fungsi Contoh & AND A & B OR A B; ^ XOR A ^ B; ~ Complement 1 ~A; >> Shift Right A >> 3; << Shift Left B << 2; 29
Operator Bitwise Operasinya dilakukan bit per bit Contoh: int a=24; int b=35; int c, d; c = a & b; //nilai c = 0 d = a b; //nilai d = 59 a=24 Binernya: 011000 b=35 Binernya: 100011 (a&b) per bit hasilnya : 000000 desimalnya 0 (a b) per bit hasilnya : 111011 desimalnya 59 30
Operator Bitwise Dua buah bit di-xor-kan akan menghasilkan 1 jika kedua bit tersebut berbeda, dan akan menghasilkan 0 jika kedua bit tersebut sama. Contoh: int A,B=45; A=B^75; //Nilai A=102 Desimal 45 binernya: 0101101 Desimal 75 binernya: 1001011 Kemudian bit per bit di XOR kan maka hasilnya: 1100110 atau (102 desimal). 31
Operator Bitwise Dengan menggunakan operator komplemen (~), maka setiap bit bernilai 0 akan dirubah menjadi 1 dan sebaliknya. Contoh: int A, B=0xC3; A=~B; //nilai A=0x3C; Catatan: Penulisan bilangan hexadesimal pada bhs pemrograman C menggunakan awalan 0x atau 0X (nol-x). 0xC3 binernya: 1100 0011 Di-komplemenkan hasilnya: 0011 1100 atau dlm notasi hexadecimal menjadi 3C 32
Operator Bitwise Operator shift-right (>> n) dapat dipergunakan untuk menggeser n bit ke kanan dan diberi nilai 0 (nol) sejumlah n bit dari paling kiri yang ditinggalkan. Operator shift-left (<< n) dapat dipergunakan untuk menggeser n bit ke kiri dan diberi nilai 0 (nol) sejumlah n bit dari paling kanan yang ditinggalkan. Contoh: int A, B, C=78; A = C>>3; //nilai A=9 B = C<<2; //nilai B=312 Catatan: 78 binernya: 00100 1110 Geser kekanan 3 bit: 000001001 = 9 Geser kekiri 2 bit : 100111000 = 312 33