Minggu ke-3 Tipe Data Dalam C Pendahuluan Setiap bahasa pemograman menyediakan tipe data. C memiliki beberapa tipe data primitif (intrinsic data type) yang merupakan bagian dari bahasa C itu sendiri. C juga memiliki tipe data lain yang biasa dikenal dengan istilah aggregate data type seperti array. Komplek data tipe dapat dibuat dengan kombinasi antara kedua tipe data tersebut. Minggu ini kita akan membahas bagaimana deklarasi, ekspresi serta cara memanipulasi tipe data dalam C.
Objektif Memperkenalkan tipe data dan operator dalam C Menjelaskan beberapa contoh yang dapat menjebak programmer berkaitan dengan tipe data sehingga menimbulkan error Menjelaskan cara mengkonversi satu tipe data ke tipe data yang lain
Bahan Bacaan Buku pegangan atau buku-buku lain yang menjelaskan tentang topik ini.
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
1
Tipe Data Dalam C Tipe Data Primitif char signed short int unsigned short int float
signed char signed int unsigned int double
unsigned char signed long int unsigned long int long double
Pada dasarnya keyword signed sangat jarang digunakan karena signed int sama artinya dengan int. Compiler mengerti bila suatu variable dideklarasikan bertipe int maka variable tersebut adalah signed int atau bilangan integer positif maupun negatif. Unsigned int berarti bilangan yang dimaksud adalah bilangan integer positif saja.
Besar Memori Untuk tipe komputer 16 bits, tipe data short dan int membutuhkan memori sebesar 2 byte dan long 4 byte. Sedangkan untuk komputer 32 bits, tipe data short membutuhkan memori sebesar 2 byte dan int dan long sebesar 4 byte.
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
2
Tipe Data Dalam C Signed int Komputer 16 bits − 215 ≤ int ≤ +215 − 1
=
− 32768 ≤ int ≤ +32767
=
− 2147483648 ≤ int ≤ +2147483647
=
0 ≤ int ≤ +65535
=
0 ≤ int ≤ +4294967295
Komputer 32 bits − 2 31 ≤ int ≤ +2 31 − 1
Unsigned int Komputer 16 bits 0 ≤ int ≤ +216 − 1
Komputer 32 bits 0 ≤ int ≤ +2 32 − 1
Gunakan sizeof untuk mengetahui besar memori yang dibutuhkan suatu variabel: printf("Size of int = %d, size of double = %d\n", sizeof(int), sizeof(double));
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
3
Tipe Data Dalam C Operator Dalam C (Precedence & Associativity) Precedence Operator
Associativity
() [] . -> ++(postfix) --(postfix) ++(prefix) --(prefix) ! ~ sizeof (type casting) + (unary) - (unary) &(address) * (dereference) * / % + << >> < <= > >= == != & ^ | && || ?:
Kiri ke kanan
= += -= *= /= %= >>= <<= &= ^= |=
Kanan ke kiri
, (comma operator)
Kiri ke kanan
High
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
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
Low
4
Tipe Data Dalam C Arithmetic Operator * /
Perkalian Pembagian
y * 10 a/b
+ %
Penjumlahan Pengurangan Modulus
a+b a-b x%y
-+
x%y Unary plus & minus
Apabila variabel a dan b bilangan bulat (integer) maka hasil pembagian akan dibulatkan (integer division)
Hanya bisa digunakan untuk tipe data integer termasuk char. Tidak dapat digunakan untuk bilangan pecahan seperti float dan double. 'c' % 10 Legal 5.5 % 2 Illegal equivalen dengan x - y * ( x / y)
Relational Operator > >= < <= != == && || !
a>b a != b a tidak sama dengan b a == b a sama dengan b (a && b) || (c && !d) !x = 0 jika x adalah bilang bukan nol !x = 1 jika x adalah 0
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
5
Tipe Data Dalam C Increment/Decrement Operator ++
Increment
x++ (postfic increment) ++x (prefix increment)
--
Decrement
x-- (postfix decrement) --x (prefix decrement)
Contoh x = 5; y = x++;
x = 5; y = ++x;
x = 5; y = x + x++;
Result: y = 5 dan x = 6
Result: y = 6 dan x = 6
Berapakah nilai y? Nilai y tergantung dari evaluation order / system-dependant Bila evaluation order dari kiri ke kanan maka y = 10 Bila evaluation order dari kanan ke kiri maka y = 11
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
6
Tipe Data Dalam C Assignment Operator Penggunaan assignment operator = sering menjebak programmer. Operator = sangat jauh berbeda artinya dengan operator ==
Contoh Boolean expression of if statement if (x = y - 10) ....
Statement ini adalah legal dalam C. Ingat bahwa C tidak memiliki tipe data boolean. Non-zero selalu berarti TRUE dan zero berarti FALSE Assigment operator
Statement di atas tidak sama dengan statement berikut ini: if (x == y - 10) ...
Logical operator
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
7
Tipe Data Dalam C 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 ?
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
8
Tipe Data Dalam C Konversi Tipe Data Konversi secara otomatis (automatic conversion/promotion) Konversi secara eksplisit (casting)
Konversi Secara Otomatis Apabila dalam suatu statement terdapat dua variabel dengan tipe yang berbeda, maka salah satu dari variabel tersebut akan dikonversikan berdasarkan urutan berikut: int < unsigned < long < unsigned long < float < double < long double
Contoh char c; c-s/i u * 3.1 - i c+3 u - ld
short s;
int i;
long l;
dikonversi menjadi dikonversi menjadi dikonversi menjadi dikonversi menjadi
unsigned u;
float f;
double d;
long double ld;
int double int long double
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
9
Tipe Data Dalam C 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 x = (float) ((int) y + 1); (double) (x = 77)
Tidak sama artinya dengan (double) x = 77
int x = 7, y = 3; float f; f = x / y; f = (float) x / float (y);
Nilai f = 2 Nilai f = 2.3
Copyright © 2010, Dr. Taufik Fuadi Abidin, S.Si M.Tech, Program Studi Teknik Informatika FMIPA Universitas Syiah Kuala
Mengapa?
10