Representasi Data

Untuk memberi tanda bilangan biner telah diperjanjikan yakni 0 untuk bilangan

positif atau plus dan 1 untuk bilangan negatif atau minus. Pada bilangan biner n-bit, jika

susunannya dilengkapi dengan bit tanda, maka diperlukan register dengan panjang n+1 bit.

Dalam hal ini, n-bit digunakan untuk menyimpan bilangan biner itu sendiri dan satu bit untuk

tandanya. Pada representasi bilangan biner yang dilengkapai dengan tanda bilangan, bit tanda

ditempatkan pada posisi paling kiri atau sebagai MSB.


Untuk keperluan operasi aritmetika yang melibatkan bilangan biner negatif, bilangan

biner dapat direpresentasikan dalam beberapa cara yakni dengan representasi besaran

bertanda (signed-magnitude representation) selanjutnya disingkat dengan SM, representasi

komplemen pertama bertanda (signed-1’s complement representation) disingkat dengan S1C, dan

representasi komplemen kedua bertanda (signed-2’s complement representation) disingkat S2C.

Berikut ini adalah contoh beberapa representasi bilangan biner untuk bilangan heksadesimal

+5 dan -5 serta +7 dan -7.

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)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.