Bagaimana Numerik Bulat diSimpan di Memori


Setelah Pada Artikel Sebelumnya kita telah membahas Bagaimana Karakter atau String Disimpan Di Memori, maka kali ini kita akan membahasa Bagaimana Numerik Bulat disimpan di memori. Bagi rekan-rekan yang belum membaca artikel sebelumnya, sangat disarankan untuk membacanya karena di dalam artikel sebelumnya terdapat pemahaman dan jenis tipe data yang umum untuk setiap bahasa pemrograman.

oke, langsung saja, yang dimaksud dengan Numerik Bulat tentu saja bilangan yang berbentuk bulat, seperti misalnya short interger, integer, ataupun long integer. 3 tipe data ini pada dasarnya hanya dibedakan dengan ukuran dan jangkauan nilai masing-masing. Untuk cara menyimpannya dimemori pada dasarnya adalah sama. Sebelum lebih jauh, untuk bahasa pemrograman C dikenal 2 jenis tipe numerik bulat yakni numerik bulat bertanda (signed) dan numerik bulat tidak bertanda (unsigned). Untuk numerik bulat bertanda adalah numerik yang memiliki tanda negatif (-) ataupun positif (+). Sedangkan untuk numerik yang tidak bertanda, tidak mengenal tanda bilangan, karena dianggap semuanya (+).

Nama Ukuran Jangkauan Keterangan
short int 2 byte

-32,768 sampai 32,767

short int
signed short int 2 byte

-32,768 sampai 32,767

short int bertanda
unsigned short int 2 byte

0 sampai 65,535

short int tidak bertanda
int 4 byte

-2,147,483,648 sampai 2,147,483,647

int
signed int 4 byte

-2,147,483,648 sampai 2,147,483,647

int bertanda
unsigned int 4 byte

0 sampai 4,294,967,295

int tidak bertanda
long int 4 byte

-2,147,483,648 sampai 2,147,483,647

long int bertanda
signed long int 4 byte

-2,147,483,648 sampai 2,147,483,647

long int bertanda
unsigned long int 4 byte

0 sampai 4,294,967,295

long int tidak bertanda

besarnya ukuran dan jangkauan nilai dari tipe data sangat tergantung dengan kompiler dan komputer yang digunakan. Penulis menggunakan platform Ubuntu 12.04 dengan compiler GCC 4.6.3 dengan komputer dengan prosesor Core i3. Untuk mengecek jangkauan nilai anda bisa menggunakan fungsi sizeof() di C. Namun pada umumnya,  ukuran dan jangkauan nilai tipe int akan sama dengan tipe short int atau long int.

perhatikan bahwa signed int mempunyai ukuran dan jangkauan nilai yang sama dengan tipe int, begitupun signed short int dan short int, serta long int dan signed long int. Sehingga signed int, signed short int, dan sogned long int jarang digunakan dalam pemrograman.

dengan memahami ukuran dan jangkauan dari masing-masing tipe data, maka akan sangat membantu bagi pembuat program dalam hal penghematan memori ataupun pemilihan tipe data yang benar-benar pas dan sesuai dengan data yang ingin ditampung. Sebagai contoh, kita ingin menyimpan data jumlah mahasiswa dengan ketentuan bahwa jumlah mahasiswa tidak akan lebih dari 35.000 orang. Biasanya, pembuat program akan langsung menggunakan tipe int untuk maksud tersebut. Tapi seperti kita lihat pada tabel di atas, bahwa tipe integer mampu menampung data tersebut namun mempunyai ukuran yang besar yakni 4 byte dan sangat memboros memori. Tipe Short int mempunyai ukuran 2 byte, namun tidak dapat menampung nilai 35.000. Jadi untuk maksud tersebut, tipe data yang paling cocok untuk menyimpan data tersebut adalah unsigned short int dengan ukuran 2 byte dan jangkauan nilai dari 0 sampai dengan 65.535 dan tentunya sangat menghemat memori. Untuk pengembangan selanjutnya tergantung dari kreatifitas pembaca.

Kita langsung saja pada topik kita, yakni bagaimana sebenarnya numerik bulat disimpan di memori. Untuk membahasnya kita perlu memisahkan menjadi Numerik Bulat Bertanda  (signed) dan Numerik Bulat tidak bertanda (unsigned).

Numerik Bulat Bertanda (signed)

Untuk Numerik Bulat Bertanda, khususnya bilangan positif sama dengan menyimpan bilangan pada umumnya, dan untuk bilangan negatif, akan disimpan dengan cara komplemen 2. Semua nilai bilangan akan disimpan dalam nilai binari dalam memori komputer.

sebagai contoh nilai 25.000 dalam bentuk signed (bertanda) akan disimpan dengan nilai hexa 0x61a8 atau dalam bentuk binari 0110 0001 1010 1000. Untuk bilangan negatif, seperti yang dikatakan tadi akan disimpan dengan cara komplemen 2. Komplemen 2 yang dimaksud adalah nilai negatif diwakili dari nilai postifnya, kemudian meng-NOT-kan nilai-nilai binernya (0 menjadi 1 dan 1 menjadi 0, hasil proses ini disebut dengan komplemen 1), kemudian menambahkan hasilnya dengan binary 1 (hasilnya akan disebut komplemen 2).

Sebagai contoh nilai -25.000.

Nilai 25.000                    0110 0001 1010 1000

nilai bit di-NOT-kan       1001 1110 0101 0111  (komplemen 1)

ditambah binary 1          0000 0000 0000 0001

——————————————————— +

hasil                               1001 1110 0101 1000 (komplemen 2)

Maka nilai -25.000 akan disimpan dimemori menjadi nilai binary 1001 1110 0101 1000, atau dalam bentuk hexa 0x9E58, atau dengan desimal 40.536. Heheheh🙂.

Pada dasarnya, hubungan nilai negatif dengan nilai positif dapat didapatkan dengan cara, jangkauan nilai tidak bertanda ditambahkan dengan 1 dan ditambhkan dengan nilai negatifnya, menjadi 65.535 + 1 + (-25.000) = 40536.

Numerik Bulat Tidak Bertanda (unsigned)

Untuk Numerik Bulat tidak bertanda, pada dasarnya mempunyai cara yang sama seperti angka-angka biasa. Sebagai contoh kita ingin menyimpan nilai 35.000 dalam tipe data unsigned short int, maka dalam memori akan disimpan dengan menulis biner 1000 1000 1011 1000 atau dalam bentuk hexa 0x88B8. Contoh Lain, nilai numerik 25 akan di simpan dalam bentuk biner 0000 0000 0001 1001 atau dalam bentuk hexa 0x0019.

Lantas Bagaimana Kompiler membedakannya?

Pada dasarnya untuk membedakan nilai binarynya adalah bagaimana kompiler/ Bahasa C menginterprerasikan nilai binary ini. Dalam bahasa C, nilai binary diinterpretasikan tergantung pada variabel tipe atau kode format yang digunakan untuk menampilkannya. Begitupun pada bahasa pemrograman yang lain. Sebagai contoh nilai 1001 1110 0101 1000 disimpan dalam tipe unsigned short int, maka semua 16 bit tersebut akan dikonversi ke dalam nilai desimal 40.536. Begitupun sebaliknya, jika disimpan dalam bentuk signed short int, maka semua 16 bit tersebut akan dikonversi ke dalam nilai desimal -25.000. Logikanya jangkauan nilai dari signed short int adalah -32.768 sampai +32767, sehinggal untuk menampung nilai 40.536 dalam jangkauan tersebut tidak akan mencukupi, sehingga kompiler atau bahasa C mengkonversinya ke dalam -25.000. Dalam contoh kasus pada Signed Short Int di atas, ada ketentuan yang memudahkan kompiler untuk mengkonversinya, yakni jika bit paling belakang bernilai 1, maka hasilnya akan bernilai negatif(-), sedangkan jika bernilai 0, hasilnya pasti positif (+).

Mungkin sampai di sini dulu, untuk mengembangkan pemahaman selanjutnya, banyaklah berlatih soal-soal latihan sehingga lebih memahaminya…. Pada artikel selanjutnya kita akan membahas tentang Bagaimana Numerik Pecahan disimpan di Memori. TUnggu artikelnya yah???😀

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s