Kamis, 08 Desember 2011

Format Data komputer

FORMAT DATA KOMPUTER
ASCII (American Standard Code for Information Interchange)
Data ASCII mewakili karakter alfanumerik dalam memori sistem komputer. Format Data
yang digunakan adalah 7 bit, dimana bit yang ke 8 digunakan untuk memuat parity.
dalam komputer pribadi, kumpulan karakter extended ASCII menggunakan kode 80 H-FF H.
karakter extended ASCII menyimpan huruf-huruf asing dan tanda baca, karakter greek (Yunani),
karakter matematika, karakter-karakter box drawing, dan karakter-karakter khusus lainnya.
Data ASCII dapat disimpan dalam memori menggunakan direktif khusus program assembler
yaitu Define Byte (DB) atau Byte.
FORMAT DATA KOMPUTER
BCD(Binary Code Desimal)
Informasi BCD disimpan dalam bentuk packed atau unpacked. Data packed disimpan dalam
bentuk dua digit per byte, sedangkan data BCD unpacked disimpan satu digit per byte. Rentang
digit BCD antara 0000B sampai 1001B
BCD unpacked sering digunakan oleh keypad atau keyboard, sedangkan BCD Packed
digunakan untuk beberapa instruksi termasuk untuk penjumlahan dan pengurangan BCD dalam
kumpulan instruksi di CPU.
FORMAT DATA KOMPUTER
UNSIGN dan SIGN INTEGER
Data Ukuran Byte
data ukuran byte disimpan dalam unsigned dan signed integer(bilangan bulat tak
bertanda dan bilangan bulat bertanda). Perbedaan dalam bentuk ini adalah bobot dari posisi
paling kiri. Untuk unsign integer nilainya 128 dan untuk signed integer nilainya adalah
-128. dalam format signed, bit yang paling kiri adalah bit tanda bilangan. Kisaran dari
unsigned integer adalah 0 sampai 255, sedangkan signed integer berkisar antara -128 sampai
+127.
Bilangan negatif disajikan dalam bentuk ini, tetapi disimpan dalam bentuk komplement
dua, seperti yang telah dijelaskan diatas.
FORMAT DATA KOMPUTER
UNSIGN dan SIGN INTEGER
Data Ukuran Word
Satu ukuran word dibentuk oleh dua byte data. LSB selalu disimpan dalam lokasi memori
paling rendah, dan MSB disimpan yang paling tinggi. Metode untuk penyimpanan ini disebut
dengan format little endian. Metode alternatif disebut format big endian. Untuk menyimpan
data ukuran word dalam memori, digunakan direktif DW(Define Word). Namun biasanya data yang
berukuran lebih dari 8 bit disimpan menggunakan format little endian.
Limit Tipe Data
Mengolah data komputer ada rambu-rambunya.
Prinsip paling dasar, tiap tipe data punya rentang nilai. Misalnya saja:
TIPE MINIMUM MAKSIMUM KETELITIAN
short int -128 +127 1
int -32768 +32766 1
long int 1
unsigned short 1
unsigned 1
unsigned long 1
float
Larangan paling dasar adalah:
* Jangan sampai mengisikan nilai di luar batas MINIMUM – MAKSIMUM.
* Jangan simpan bilangan teliti (significant) lebih kecil dari KETELITIAN.
Itu saja. Gampang kan hukumnya. Mari lihat konsekuensinya kalau ada yang nekad atau ceroboh
melanggar batas.
Buat contoh, ambil tipe data unsigned short (8 bit). Tipe data ini punya rentang nilai 0 -
255. Representasi kode binernya adalah sbb:
00000000 = 0 desimal
00000001 = 1 desimal


11111110 = 254 desimal
11111111 = 255 desimal
Jika anda pesan variabel unsigned short, bayangkan bahwa anda punya panci yang batas
bawahnya adalah 0 dan batas atasnya 255. Apa yang terjadi kalau anda isi air sampai lebih
dari batas 255 ? Tumpah. Sementara itu kebalikannya, kalau anda rebus airnya sampai menguap
habis, pancinya bakal gosong.
Variabel juga bisa kelebihan (overflow) dan kekurangan (underflow). Tapi efeknya aneh, tidak
seperti panci. Perhatikan program berikut:
main()
{ unsigned short data;
// kasus pertama
data = 255;
data = data + 1;
printf(“%u”, data);
// kasus kedua
data = 0;
data = data – 1;
printf(“%u”, data);
}
Pada kasus pertama, mestinya data jadi 256, tapi 255 itu kan sudah MAKSIMUM. Sementara yang
kedua , mestinya data jadi -1, tapi 0 kan MINIMUM. Jadi berapa keluaran program ini ? Jangan
terkejut, keluarannya pertama adalah 0. Kok tidak meluap, dan malahan jadi habis ? Sementara
itu keluaran kedua adalah 255. Bukannya gosong malah jadi penuh. Kenapa bisa ya ?
Ini dia kisahnya kalau kita lihat operasi pada level kode binernya.
KASUS1
desimal: 255d + 1d = 256d
biner : 11111111b + 1b = 100000000b (overflow 9 bit, nilai = 256)
error : = 00000000b (terpotong jadi 8 bit, nilai = 0)
KASUS2
desimal: 0d – 1d = -1d
biner : 00000000b – 1b = 111111111b (underflow 9 bit)
error : = 11111111b (terpotong jadi 8 bit, nilai = 255)
Mudah-mudahan contohnya cukup jelas. Coba, berapa hasilnya kalau 255+2 ?
Berapa kalau 0-2 ?
Stop … jangan lanjutkan baca kalau belum bisa tahu jawabnya. Saya tungguin nih.
Zzzz ….
Sudah ? Oke, dilanjut. Ada yang bertanya-tanya nggak, kenapa pada kasus kedua, -1d kok jadi
111111111b ? Jawabnya, karena komputer melakukan operasi aritmatika (tambah/kurang) memakai
rangkaian digital. Nah rangkaian digital pengurangan, tanpa modifikasi apa-apa, akan membuat
00000001b jadi 00000000b, 00000000b jadi 11111111b, dan seterusnya 11111111b jadi 11111110b.
Singkat kata, itu kelakuan alamiah rangkaian digital.
Lho … kalau memang kelakuan alamiahnya begitu, kenapa tidak dimanfaatkan saja ? Kita
simpan data integer negatip sebagai berikut:
00000000 = 0 desimal // mulai dari 0
00000001 = 1 desimal // naik terus sebagai positip

01111111 = 127 desimal // stop sampai setengah rentang
10000000 = -128 desimal // rentang sisa buat negatip
10000001 = -127 desimal // tapi mulai dari -128
10000010 = -126 desimal

11111110 = -2 desimal
11111111 = -1 desimal // sebab minus satu di sini
Nah inilah representasi 2-komplemen. Sederhana kan idenya ?
Sekarang, dengan representasi data seperti itu, apa yang terjadi kalau kita buat program
seperti ini?
main()
{ // data signed integer 8 bit
short int data;
// kasus pertama
data = 127;
data = data + 1;
printf(“%d”, data);
// kasus kedua
data = -128;
data = data – 1;
printf(“%d”, data);
}
Anda pasti tahu jawabnya kan. Kode 01111111b (127) kalau ditambah satu akan jadi 10000000b,
alias -128. Singkat kata, signed integer punya aritmatika aneh seperti ini:
127 + 1 = -128 (overflow, ERROR)
-128 – 1 = 127 (underflow, ERROR)
-1 + 1 = 0 (roll back, tapi betul)
0 – 1 = -1 (roll over, tapi betul)
Mudah-mudahan anda jadi tahu bahayanya overflow dan underflow. Sebagai penutup, ini kisah
serem buat nakut-nakutin. Konon ada programmer roket luar angkasa memakai variabel integer
untuk menyimpan data daya dorong roket. Ketika roketnya berangkat ke atas, ternyata daya
dorong roket positip sangat besar, sehingga variabelnya overflow. Ingat bahwa data bertipe
integer kalau overflow akan jadi negatip. Artinya, roket mendorong terbalik ke bawah ! Jelas
saja software kendali yang menghitung terbangnya roket kebingungan, dan … kabooommmm !!!
Jatuhlah roket Ariane. (disclaimer: kisah ini cuma bisik-bisik yang tidak diakui oleh
Ariane)

Tidak ada komentar:

Posting Komentar