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