15.07.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!