Tipe Data Pendahuluan Setiap bahasa pemograman yang bersifat strong-typed, seperti bahasa pemrograman C, memerlukan tipe data untuk mendeklarasikan variabel. Tipe data terdiri dari tipe data primitif (intrinsic data type) dan tipe data agregasi (aggregate data type) seperti array. Tipe data yang kompleks, yang merupakan kombinasi antara tipe primitif dan array, juga dapat dibuat bila diperlukan. Pertemuan ini akan membahas cara mendeklarasi, menggunakan dan memanipulasi tipe data dalam C. Pemahaman terhadap tipe data dan operator dilakukan dengan memperlihatkan beberapa contoh. Objektif Memperkenalkan tipe data dan operator dalam bahasa pemrograman C. Menjelaskan beberapa contoh yang berkaitan dengan tipe data yang dapat menjebak programmer sehingga menimbulkan error. Menjelaskan cara mengkonversi tipe data ke tipe data yang lain. Bahan Bacaan Buku pegangan atau bahan-bahan lain yang menjelaskan tentang tipe data dalam bahasa pemrograman C. Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 1
Penamaan Sebuah Variabel Variabel merupakan bagian yang penting dalam pemrograman. Variabel dideklarasikan bertipe data tertentu dan dengan penamaan yang baik. Karakter pertama dari sebuah variabel haruslah berupa huruf. Walaupun simbol _ (underscore) juga merupakan karakter yang valid untuk digunakan dalam penamaan variabel, namun penggunaaan underscore sebagai karakter awal dari sebuah variabel sangat tidak dianjurkan. Bahasa pemrograman C bersifat case-sensitif artinya huruf besar dan huruf kecil diperlakukan secara berbeda. Sebagai contoh, variabel X dan x. Kedua variabel tersebut oleh compiler dianggap sebagai dua variabel yang berbeda. Penamaan variabel diharapkan readable dan self-explanation, oleh karena itu penamaan dengan satu huruf, kecuali sebagai variabel counter, kurang direkomendasikan. Contoh: int bilangan; float pembagian; double pecahan; char huruf; Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 2
Tipe Data Primitif char signed char unsigned char signed short int signed int signed long int unsigned short int unsigned int unsigned long int float double long double Qualifier short, long, signed, dan unsigned hanya dapat ditambahkan pada tipe data integer (int). Perhatikan pendeklarasian variabel berikut ini : short int sh; long int counter; Pendeklarasian di atas dapat disederhanakan tanpa harus menggunakan tipe data int sebagai berikut : short sh; long counter; Tipe data short umumnya berukuran 16 bits sementara tipe data int berukuran 16 atau 32 bits. Compiler akan menentukan ukuran int berdasarkan spesifikasi hardware yang digunakan, namun paling kurang 16 bits. Tipe data long berukuran minimal 32 bits. Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 3
Qualifier signed atau unsigned dapat diaplikasikan pada tipe data char atau int. Tipe data yang dideklarasikan menggunakan qualifier unsigned tidak memiliki nilai negatif. Jadi, jika tipe data char berukuran 8 bits, maka unsigned char akan memiliki nilai antara 0 dan 255, sementara signed char akan memiliki nilai antara -128 dan 127. Tipe data char tanpa qualifier unsigned akan selalu signed. Signed int 16 bits 15 15 2 int + 2 1 = 32768 int + 32767 32 bits 31 31 2 int + 2 1 = 2147483648 int + 2147483647 Unsigned int 16 bits 16 0 int + 2 1 = 0 int + 65535 32 bits 32 0 int + 2 1 = 0 int + 4294967295 Fungsi sizeof() dapat digunakan untuk mengetahui besar memori yang digunakan oleh sebuah variabel: printf("size of int = %d, size of double = %d\n", sizeof(int), sizeof(double)); Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 4
Operator Dalam C (Precedence & Associativity) Precedence Operator Associativity () [ ]. -> ++(postfix) --(postfix) Kiri ke kanan ++(prefix) --(prefix)! ~ sizeof (type casting) + (unary) - (unary) &(address) * (dereference) Kanan ke kiri * / % Kiri ke kanan + - Kiri ke kanan << >> Kiri ke kanan < <= > >= Kiri ke kanan ==!= Kiri ke kanan & Kiri ke kanan ^ Kiri ke kanan Kiri ke kanan && Kiri ke kanan Kiri ke kanan?: Kanan ke kiri = += -= *= /= %= >>= <<= &= ^= = Kanan ke kiri, (comma operator) Kiri ke kanan High Low Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 5
Operator Operator Aritmatik * Perkalian y * 10 / Pembagian a / b Apabila variabel a dan b adalah bilangan bulat (integer) maka hasil pembagian akan dibulatkan. Hal ini disebut dengan integer division + Penjumlahan a + b - Pengurangan a - b % Modulo x % y Hanya bisa digunakan untuk tipe data integer termasuk char. Tidak dapat digunakan untuk tipe data pecahan seperti float dan double. 'c' % 10 Legal 5.5 % 2 Illegal x % y Eequivalen dengan x - y * ( x / y) - + Unary plus dan minus Positif dan negatif Relational Operator > >= < <= a > b!= == a!= b a tidak sama dengan b a == b a sama dengan b &&! (a && b) (c &&!d)!x sama dengan 0 jika x bilangan bukan 0!x sama dengan 1 jika x adalah 0 Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 6
Operator Increment atau Decrement ++ Increment x++ (postfix increment) ++x (prefix increment) -- Decrement x-- (postfix decrement) --x (prefix decrement) Hati-hati menggunakan operator increment dan decrement bila operator tersebut dikombinasikan dengan pernyataan lain sekaligus. Contoh: x = 5; y = x++; x = 5; y = ++x; x = 5; y = x++; Berapakah nilai y? Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 7
Operator Assignment Operator Assignment (Pemberian nilai dari variabel kanan ke variabel kiri) Penggunaan operator assignment = sering menjebak programmer. Operator = sangat berbeda dengan operator == karena operator == adalah operator logika yang akan bernilai TRUE atau FALSE. Contoh: Boolean expression of if statement if (x = y - 10) Pernyataan ini adalah legal dalam C. Ingat bahwa C tidak memiliki tipe data boolean. Non-zero selalu berarti TRUE dan zero berarti FALSE Operator assigment Pernyataan di atas tidak sama dengan pernyataan ini: if (x == y - 10) Operator logika Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 8
Assignment Operator Penggunaan assignment variable (operator) = expression sama artinya dengan variable = variable (operator) expression Contoh : y += x; y = y + x; y /= (x + 2); y = y / (x + 2); y += (x %= 3) - (t *= 5); y = y + (x = x % 3) - (t = t * 5); y += (x == 2) Berapakah nilai y bila nilai awal y = 10 dan x = 0? Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 9
Konversi Data Konversi Secara Otomatis (automatic conversion/promotion) Apabila dalam suatu pernyataan terdapat dua variabel dengan tipe yang berbeda maka salah satu dari variabel tersebut akan dikonversikan sehingga bertipe sama berdasarkan urutan berikut: int < unsigned < long < unsigned long < float < double < long double Contoh: char c; short s; int i; long l; unsigned u; float f; double d; long double ld; c - s / i dikonversi menjadi int u * 3.1 - i dikonversi menjadi float atau double c + 3 dikonversi menjadi int u - ld dikonversi menjadi long double Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 10
Konversi Secara Eksplisit (casting) Jika i adalah variabel bertipe int, maka (double) i Mengakibat i secara eksplisit terkonversi menjadi tipe double (float) i + 3 Equivalen dengan ((float) i) + 3 Berhubung operator casting lebih tinggi precedence-nya dari pada operator + maka tanda kurung tidak perlu digunakan Contoh #include <stdio.h> int main(void) { int x = 7, y = 3; float f; f = x / y; // nilai f = 2 f = (float) x / float (y); // nilai f = 2.3 } return EXIT_SUCCESS; Taufik Fuadi Abidin - Irvanizam, Jurusan Informatika, FMIPA Universitas Syiah Kuala http://www.informatika.unsyiah.ac.id 11