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
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;
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.
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 1 2 int 215 ≤ ≤+ 15 − − = −32768≤int ≤+32767 32 bits 1 2 int 231 ≤ ≤+ 31 − − = −2147483648≤int ≤+2147483647Unsigned int
16 bits 1 2 int 0≤ ≤+ 16 − = 0≤int ≤+65535 32 bits 1 2 int 0≤ ≤+ 32 − = 0≤int ≤+4294967295Fungsi sizeof() dapat digunakan untuk mengetahui besar memori yang digunakan oleh sebuah variabel:
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
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
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?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:
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
Pernyataan di atas tidak sama dengan pernyataan ini:
if (x == y - 10)
Boolean expression of if statement
Operator assigment
Assignment Operator
Penggunaan assignment
sama artinya dengan
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 ?
variable (operator) = expression
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
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 = 2f = (float) x / float (y); // nilai f = 2.3
return EXIT_SUCCESS; }