Demystifier Dicky

A blogs dedicated for simple easy followed tutorial.

Konsep Bilangan Berbasis

Sering sekali saya bertemu dengan mahasiswa CompSci yang tidak mengerti bilangan berbasis. Tidak mengerti bukan berarti nilai mata kuliah  yang ada hubungannya dengan bilangan berbasis menjadi anjlok (seperti Organisasi Komputer misalnya), beberapa dari mereka bahkan ada yang cumm laude. Pemahaman mereka mengenai bilangan berbasis cuma sekadar hafalan rumus, sangat efektif apabila digunakan untuk sekedar mengerjakan soal ujian. Yup, saya mengetahui bahwa budaya ‘hafalan rumus’ bukan cuma terjadi untuk bilangan berbasis, tapi untuk mata kuliah lainnya, seperti kalkulus, probabilitas, dan sebagainya. Kealpaan pemahaman mengenai kalkulus untuk mahasiswa CompSci tentu saja sangat bisa ditolerir, karena jarang sekali ilmu tersebut diterapkan di dunia IT (jarang bukan berarti tidak sama sekali). Nah, bagaimana dengan kealpaan pemahaman mengenai bilangan berbasis? John Mauchly merancang komputer elektronik pertama dengan memanfaatkan konsep bilangan biner. File editor sangat umum menggunakan heksa desimal untuk mempermudah pengeditan. Intinya, bilangan berbasis itu teman kita, jangan sampai kita tidak mengerti apa itu bilangan berbasis.

Let’s define ‘mengerti’

Saya masih ingat pada saat masih SD dan pertama kali belajar perkalian. Yang diajarkan pertama kali adalah perkalian satu, perkalian dua, tiga dan sebagainya. Saya menghafal perkalian-perkalian itu sampai larut malam, karena takut kalau keesokan harinya disuruh maju ke depan sambil melafazkan perkalian tersebut. Kalau nggak hafal, tentu saja malu Men! Bagi saya saat itu perkalian itu cuma sekedar hafalan, hafalan perkalian dua, hafalan perkalian tiga dan sebagainya. Pandangan saya berubah suatu ketika saya berkunjung ke rumah tetangga dan kepala keluarga (bapaknya maksudnya) dari tetangga saya itu mengatakan sesuatu yang mengubah hidup saya selamanya (halah). Kata-kata itu adalah, ‘Empat kali dua itu, artinya adalah empatnya ada dua kali, jadi empat ditambah empat, hasilnya tentu saja delapan’. Saya waktu itu yang selalu menganggap bahwa perkalian itu adalah hafalan, tanpa ada makna tertentu dibaliknya, dibuat tercengang oleh kata-kata yang mungkin anak TK aja udah tau! Akhirnya saya sadar, bahwa dalam belajar matematika, rumus itu nggak penting! Yang penting itu konsep!

 
Nah sekarang, orang yang ngerti perkalian itu yang mana sih? Misal ada orang yang hafal perkalian plus skill melakukan perhitungan dengan cepat, tapi tidak tahu bahwa lima dikali empat itu artinya adalah ‘limanya ada empat kali’ dibandingkan sama orang yang nggak hafal perkalian, tapi tahu arti dari lima dikali empat, orang yang mana yang dapat dianggap mengerti perkalian? Keduanya tentu saja parah, tapi entah kenapa, saya lebih cenderung memilih orang yang kedua (yang mengerti makna perkalian walaupun tidak hafal perkalian).

 

Dewasa ini, kebanyakan dari orang yang belajar sains berada di dalam kuadran penghafal. Coba, tanya sama mahasiswa yang kalkulusnya dapat A, limit itu apa sih? Pasti nggak tahu. Kalkulus itu kan ilmu tentang limit, diferensial dan integral itu ujung-ujungnya limit, lha kalau limit nggak tau kok bisa dapet A J

 

Di kampus saya (Binus), bahkan ada dosen senior yang nggak ngerti konsep. Saat itu saya sedang mengambil mata kuliah Probabilitas dan Statistika. Nah, beliau memberi soal yang menurut saya salah soal. Soalnya adalah mengenai sebaran binomial. Saya tahu persis bagaimana rumus sebaran binomial itu diturunkan, sehingga sebaran binomial itu cuma valid kalau peluang-peluangnya saling lepas (kalo bingung nggak usah dipikirin J ). Pada saat kelas selesai saya menghampiri beliau dan mengatakan bahwa soal yang tadi itu absurd. Beliau belum mau ngaku kalau soal itu salah. Waduh, udah lama ngajar kok gini aja nggak tau!? Minggu depannya saat ketemu lagi, akhirnya beliau mengakui kesalahannya. Salut, dosen senior yang berani mengaku salah, suatu saat saya baru tahu bahwa beliau adalah salah satu pembesar Badan Pusat Statistika.

Belajar bilangan berbasis itu belajar apa sih?

Tanpa disadari sebenarnya kita sudah diajarkan bilangan berbasis sejak TK. Kita dikenalkan kepada bilangan desimal, bilangan berbasis 10. Kita diajarkan cara menghitung dari 1 sampai 1000. Anak TK yang bisa menghitung dari 1 sampai 1000, kemungkinan juga bisa melanjutkan sampai 2000 (kalau nggak capek tentunya), karena sudah mengerti bagaimana pola dari bilangan desimal. Bagaimana 10, kemudian kenapa menjadi 11, kemudian 12, dari 399 kok bisa jadi 400, mereka sudah mengetahui pola penambahannya. Tidak kalah pentingnya, mereka juga sudah menyadari bahwa digit paling kanan itu bernilai satuan, diikuti dengan digit di kirinya yang bernilai puluhan dan sebagainya. Sampai di sini, dapat dikatakan bahwa anak TK tersebut sudah mengerti bilangan desimal.

 

Orang yang sudah memahami desimal, belum tentu menyadari bahwa ada sistem bilangan berbasis selain sepuluh. Saat saya kelas 5 SD, ada sebuah game Nintendo yang judulnya DJ Boy, game tentang perkelahian sambil memakai sepatu roda. Pada game tersebut ditemukan adanya Easter egg. Dengan menekan suatu kombinasi tombol yang rumit (mirip-mirip atas, atas, bawah, a, b, a, b), akan menyebabkan nyawanya menjadi tidak terbatas. Kenapa tidak terbatas? Karena pada indikator jumlah nyawanya, terpampang sebuah angka yang aneh, yaitu angka 3C, dan setelah puluhan kali mati tetap belum game over, maka dapat disimpulkan nyawanya tidak terbatas! Benarkah tidak terbatas? Untuk mengujinya, saya sengaja masuk ke jurang (bukan saya yang masuk ke jurang, tapi karakter di dalam game tersebut) dan melihat indikator jumlah nyawanya. Sebelum masuk adalah 3C. Masuk jurang, mati sehingga nyawanya berkurang menjadi 3B. 3B? WTF!? Mirip-mirip ukuran pakaian dalam! Pola pengurangan berikutnya adalah:

 

3A, 39, 38, 37,36, ..., 32, 31, 30, 2F, 2E, 2D, 2C, 2B, 2A, 29, 28, ..., 21, 20, 1F, 1E, 1D, ..., 12, 11, 10, F, E, D, C, B, A, 9, 8, ..., 3, 2, 1

 

Bagaimana saat nyawanya 1 dan masuk ke jurang? Nyawanya habis dan game over! Jadi anggapan bahwa nyawanya tidak terbatas itu salah. Beberapa tahun kemudian, saya baru tahu bahwa pola-pola kriptik di atas itu ternyata adalah bilangan heksa desimal, bilangan berbasis 16. Orang yang memahami kenapa pola pengurangannya seperti itu, dan menyadari bahwa dalam heksa desimal itu digit paling kanannya bernilai satuan, diikuti digit di sebelah kirinya bernilai 16-an, di sebelah kirinya lagi bernilai 256-an, adalah orang yang mengerti bilangan heksa desimal.

 

Orang yang mengerti bilangan berbasis, berarti adalah mengetahui pola penambahan untuk sistem bilangan berbasis berapapun.

 

Orang yang mengerti bilangan berbasis, mengerti bahwa pola penambahan bilangan berbasis lima adalah:

 

0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 42, 43, 44, 100, 101, dan seterusnya...

 

Orang yang mengerti bilangan berbasis, mengerti bahwa pola penambahan bilangan berbasis 12 adalah:

 

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, ..., 98, 99, 9A, 9B, A0, A1, A2, ..., A9, AA, AB, B0, B1, B2, ..., B9, BA, BB, 100, 101, dan seterusnya...

 

Orang yang mengerti bilangan berbasis, mengerti pola penambahan untuk bilangan berbasis 8, 17, 20, 100, 1 milyar, 1 zillion, dan sebagainya...

 

Orang yang tidak mengerti pola-pola di atas, terlepas dari berapa nilai mata kuliah Anda untuk pelajaran yang ada hubungannya sama basis, berarti ilmu Anda cuma hafalan :p

Apa yang biasa diajarkan dosen pada kelas-kelas CompSci?

Hal pertama yang diajarkan oleh dosen pada mahasiswa adalah bilangan berbasis itu ada banyak, contohnya adalah:

  • ·         Bilangan biner (berbasis dua)
  • ·         Bilangan oktal (berbasis delapan)
  • ·         Bilangan desimal (berbasis sepuluh)
  • ·         Bilangan heksa desimal (berbasis enam belas)

Tentu saja, hal di atas sangat benar, tapi sekaligus menipu. Biasanya dosen tidak menekankan bahwa ada bilangan berbasis lain selain di atas, sehingga mahasiswa biasanya beranggapan bahwa bilangan berbasis itu ya cuma biner, oktal, desimal, atau heksa desimal. Kenyataannya, semua bilangan cacah yang lebih besar dari 1 itu ada bilangan basisnya, jadi ada bilangan berbasis tiga, empat, lima, seratus, satu miliar, satu caturta, dan sebagainya.

Hal berikutnya yang diajarkan adalah bagaimana melakukan konversi dari bilangan berbasis selain sepuluh ke bilangan berbasis 10, sebagai contoh:

·         100101 (biner) = ... (desimal)

·         10263 (oktal) = ... (desimal)

·         2FB (heksa) = ... (desimal)

 

Terkait dengan soal di atas, dosen langsung memberi rumus yang bersesuaian. Sebagai contoh adalah rumus untuk mengubah bilangan berbasis 8 ke 10:

 

10263 (oktal)=1∙8^4+0∙8^3+2∙8^2+6∙8^1+3∙8^0 (desimal)

 

Sekali lagi, tentu saja tidak ada yang salah dengan formula di atas, yang salah adalah dosen tidak memberi tahu dari mana asal-muasal rumus tersebut, dan tentu saja, mahasiswa yang telah terbiasa dengan budaya menghafal rumus dengan mudahnya ‘memahami’ rumus di atas.

 

Berikutnya, dosen memberi bentuk soal lain yaitu bagaimana mengubah bilangan desimal menjadi bilangan berbasis lain dengan menggunakan metode pembagian. Lebih lanjut, bahkan dosen memberi cara paling mudah untuk melakukan konversi biner–oktal–heksa desimal dengan melakukan penggabungan pada beberapa digitnya. Seperti biasa, teknik penggabungan beberapa digit dalam rangka pemudahan pengonversian tidak diberi tahu untuk pasangan bilangan berbasis lainnya (bisa juga digunakan untuk pasangan bilangan berbasis 3-9-27, 5-25, dan sebagainya).

Apa yang salah dengan metode di atas?

Sepintas memang tidak ada yang salah dengan metode di atas, apalagi dengan fakta bahwa sebagian besar mahasiswa dapat melewati ujian dengan baik. Ingat tujuan utama mengetahui bilangan berbasis bukan cuma melakukan konversi dari bilangan berbasis anu ke bilangan berbasis ono, yang paling penting adalah mengerti arti dari bilangan berbasis itu sendiri. Saya masih ingat bahwa pada saat saya masih kelas dua SMP terdapat materi bilangan berbasis pada pelajaran matematika dan diberi tahu arti dari bilangan berbasis oleh kakak saya (lagi-lagi, guru saya hanya memberi rumus). Saat itu saya merasakan keanggunan dari matematika, betapa hebatnya matematikawan India ditambah ditemukannya angka nol oleh orang Arab sehingga terbentuk sistem bilangan paling bagus yang pernah ada. Bayangkan kalau bilangan berbasis tidak ditemukan, masak kita mau menghitung pake angka Romawi? No Man! Noooo...!

Oke, metode tadi salah, lantas, apakah saya termasuk golongan yang mengerti atau bukan?

Orang yang mengerti bilangan berbasis, dapat menjawab soal di bawah dengan masing-masing soal kurang dari lima detik! (sebenarnya lima detik itu kelamaan)

  • ·         Dalam heksa, berapakah 7AD + 1? (ingat ya dalam 5 detik)
  • ·         Bilangan berbasis satu itu ada nggak?
  • ·         Kenapa manusia menggunakan bilangan berbasis 10? Kenapa tidak berbasis 7, atau berbasis 16 sekalian biar kayak komputer?
  • ·         Apa yang salah dengan bilangan berbasis 5: 784?
  • ·         Dalam heksa, berapakah
      o  
    2F + 1?
      o  
    FF + 1?
      o  
    2FADFABDADF + 1?
      o  
    FFAB3F0 – 1?
  • ·         Berapakah, FAB(hex) x 10(hex)? ABCDEF(hex) x 100 (hex)?
  • ·         Bilangan berbasis 18 itu seperti apa sih? Coba nyatakan lambang-lambang bilangannya!
  • ·         Dalam bilangan berbasis 18, berapakah 100(18) – 1? (maksud 100(18) adalah 100 dinotasikan dalam bilangan berbasis 18)
  • ·         Bilangan berbasis tak berhingga itu seperti apa ya?

Nah pembaca yang budiman, apabila anda dapat menjawab soal di atas dengan mudah, maka anda termasuk orang yang mengerti dan kalau ditemukan kesalahan dalam tulisan ini, please leave a comment!

Damn, Saya tidak dapat menjawabnya, lantas Anda mau bilang kalo saya bodoh? sialan Lu!

Tentu saja tidak! Yang membuat anda tidak mengerti bukan karena kebodohan, tapi karena tidak ada yang memberi tahu. Untuk mengerti konsep bilangan berbasis itu sama sekali tidak sulit, cuma butuh membaca tulisan ini J dan percayalah, sama sekali tidak sulit. Bahkan saya pernah ketemu sama orang pinter yang tidak mengerti basis. Orang itu saya anggap pinter bukan karena bisa meramal, bukan juga karena dia cantik (kenyataannya dia memang manis J ), tapi karena secara prestasi mengagumkan. Selalu juara umum di SMU, kalau ikut simulasi UMPTN di SSC Bandung skornya 80 persen ke atas (saya selalu 60 persenan), masuk elektro ITB secara PMDK (berarti rapornya bagus sekali), lulus *** laude, dan menjadi juara pada suatu lomba di Jerman saat mengambil S2 di sana. Lha kalo saya, S1  aja nggak lulus-lulus J

Sebelum ditemukan angka Arab (basis 10)

Gunakan imajinasi anda, anggap kita berada di suatu peradaban yang sangat sederhana sehingga belum ditemukan sebuah sistem bilangan, dan Anda disuruh oleh kepala suku untuk menciptakan sistem bilangan.

 

Misalkan ada sebuah jeruk, bagaimana cara menotasikan nilai ‘satu’?

 

Tentu saja, cara yang paling alami adalah dilambangkan dengan garis lurus seperti ini:

 

I

 

Sehingga, untuk menotasikan nilai ‘dua’ cukup dengan menambahkan garis lurus:

 

II

 

Demikian juga untuk menotasikan nilai-nilai berikutnya:

 

III (sebagai notasi dari ‘tiga buah’)
IIII ( sebagai notasi dari ‘empat buah’)
IIIII ( sebagai notasi dari ‘lima buah’)

Suatu saat, tentu saja juga dibutuhkan juga untuk menotasikan bilangan-bilangan besar seperti seratus, dua ratus, bahkan seribu. Oke, notasinya adalah

 

IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII (notasi dari ‘seratus’)

IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII (notasi dari ‘dua ratus’)

 

Bagaimana dengan seribu? Silahkan tulis sendiri, yang penting anda mengerti kelemahan dari sistem bilangan yang baru kita rancang. Sudah waktunya untuk menemukan sebuah sistem yang baru, sistem yang bisa menotasikan bilangan besar dengan tulisan yang sedikit.

 

Cara yang lain segera ditemukan untuk menotasikan bilangan, yaitu dengan menggunakan lambang bilangan, yang kira-kira seperti ini:

 

! 

notasi dari

‘satu’

@

notasi dari

‘dua’

#

notasi dari

‘tiga’

$

notasi dari

’empat’

%

notasi dari

’lima’

^

notasi dari

’enam’

&

notasi dari

’tujuh’

*

notasi dari

’delapan’

( 

notasi dari

’sembilan’

) 

notasi dari

’sepuluh’

- 

notasi dari

’sebelas’

 Dan sebagainya

 

Dengan cara ini, semua bilangan dapat dinotasikan cukup dengan sebuah lambang bilangan. Semua bilangan dinotasikan dalam sebuah lambang artinya sebuah bilangan berapapun pasti ada lambang bilangannya, termasuk bilangan-bilangan besar seperti ‘seratus’ maupun ‘seribu’. Bisa menotasikan ‘seratus’ berarti dari ‘satu’ hingga ‘seratus’ ada lambang bilangannya sendiri sehingga kita harus menghafal banyak sekali lambang bilangan. Sistem bilangan yang seperti itu, tentu saja gagal.

 

Sistem bilangan yang pertama walaupun harus menulis banyak ‘garis’ untuk menotasikan bilangan besar, tapi kita cuma harus menghafal sebuah lambang bilangan, yaitu ‘garis’. Untuk menotasikan bilangan besar dengan menggunakan sistem bilangan yang kedua, kita cukup menggunakan satu buah lambang bilangan (ingat semua nilai bilangan dibuat lambangnya), namun hal ini juga sulit karena lambang bilangan yang dibuat tentu saja tak berhingga. Kemudian, di antara kedua sistem bilangan tersebut, sistem bilangan mana yang terbaik? Tidak ada yang baik, keduanya absurd! Harus ditemukan sistem bilangan yang baru, sistem yang hanya terdiri dari sedikit lambang bilangan, dan bisa menotasikan bilangan besar dengan mudah.

Sistem bilangan dengan sedikit lambang bilangan, namun dapat menotasikan bilangan besar dengan mudah? Emang ada?

Tentu saja ada! Itulah yang disebut bilangan berbasis. Perhatikan bilangan yang setiap hari kita gunakan, ada berapa lambang bilangan? Ada sepuluh buah lambang bilangan, yaitu:

 

0 1 2 3 4 5 6 7 8 9

 

Cukup dengan menggunakan kesepuluh lambang bilangan tersebut, kita dapat menotasikan bilangan berapapun! Ingat, tidak ada sebuah lambang bilangan yang dapat menotasikan nilai ‘sepuluh’ karena lambang bilangannya cuma sampai 9, untuk menotasikan nilai ‘sembilan’. Lantas bagaimana cara menotasikan nilai ‘sepuluh’? Bisa, yaitu dengan menggabungkan lambang bilangan ‘1’ dan lambang bilangan ‘0’ menjadi ‘10’. Tentu saja, angka ‘10’ itu bukan lambang bilangan baru, karena cuma penggabungan dari lambang bilangan yang sudah ada. Bagaimana kalau ingin menotasikan ‘lima ratus dua puluh lima’? Ya gampang, dengan menggabungkan lambang bilangan tadi menjadi ‘525’. Tentu saja, hal tersebut bukan hal yang baru bagi anda, kemungkinan besar hal ini sudah diketahui semenjak TK. Saya cuma mau menunjukkan bahwa, sistem bilangan dengan sedikit lambang bilangan dan dapat menotasikan bilangan berapapun benar-benar ada!

Sistem Bilangan Berbasis

Sekarang kita akan menciptakan bilangan yang cuma menggunakan sedikit lambang bilangan dan dapat menotasikan bilangan berapapun. Misalkan ada lambang bilangan seperti ini:

 

0 untuk menotasikan ‘kosong’
1 untuk menotasikan ‘satu’
2 untuk menotasikan ‘dua’
3 untuk menotasikan ‘tiga’

 

Jelas sekali untuk menotasikan antara ‘kosong’ hingga ‘tiga’ kita Cuma butuh sebuah lambang bilangan. Nah, bagaimana kalau ingin menotasikan nilai ‘empat’? Ingat, tidak ada lambang bilangan ‘4’, yang ada adalah ‘0’, ‘1’, ‘2’, ‘3’. Hal ini sama dengan pertanyaan, bagaimana cara menotasikan nilai ‘sepuluh’ pada bilangan desimal. Pada bilangan desimal, lambang bilangannya cuma antara ‘kosong’ hingga ‘sembilan’, dan untuk menotasikan ‘sepuluh’ adalah dengan menggabungkan beberapa lambang bilangannya, yaitu ‘1’ dan ‘0’ menjadi ‘10’. Kembali ke pertanyaan semula, bagaimana menotasikan nilai ‘empat’ pada sistem bilangan yang baru kita buat? Sama, yaitu ‘10’. Untuk lebih jelas mari kita melihat pola penambahannya:

 

0

kosong

1

satu

2

Dua

3

Tiga

10

Empat

11

Lima

12

Enam

13

Tujuh

20

Delapan

21

Sembilan

22

Sepuluh

23

Sebelas

30

Dua belas

31

Tiga belas

32

Empat belas

33

Lima belas

 

Apakah anda dapat melihat polanya? Dimulai dari 0, kemudian 1, 2, 3. Lantas kenapa menjadi 10? Bayangkan sebuah odometer, yang angka-angkanya adalah dari 0 sampai 3. Digit yang paling kanan berputar dari 0, 1, 2, kemudian 3. Setelah 3, tentu saja odometer kembali lagi ke 0, disertai dengan penambahan (perputaran) 1 pada digit di sebelah kirinya. Hal ini berlanjut terus sehingga polanya adalah seperti di atas. Ingat pada odometer, digit paling kanan paling cepat berputar, diikuti dengan digit di sebelah kirinya, dan diikuti lagi dengan digit di sebelah kirinya lagi dan seterusnya. Apabila anda sudah mengerti dengan polanya, dapat ditebak bahwa bilangan berikutnya setelah 33 adalah:

 

100

 

Kenapa? Dimulai dari digit paling kanan yaitu 3. 3 bertambah satu, menjadi 0 lagi, tapi tentu saja disertai dengan penambahan satu pada digit di sebelah kirinya yang juga 3. 3 bertambah satu, menjadi 0, dan membuat digit di kirinya lagi (yaitu 0) bertambah 1, menjadi 1. Berikutnya adalah deret penambahan satu dari 100:

 

101, 102, 103, 110, 111, 112, 113, 120, 121, 122, 123, 130, 131, 132, 133, 200,
201, 202, 203, 210, 211, 212, 213, 220, 221, 222, 223, 230, 231, 232, 233, 300,
301, 302, 303, 310, 311, 312, 313, 320, 321, 322, 323, 330, 331, 332, 333

 

Sampai di sini, harusnya anda sudah dapat menebak bahwa angka berikutnya adalah : 1000.

 

Dengan sistem ini, berarti kita dapat menotasikan bilangan berapapun dengan hanya tiga buah lambang bilangan. Sistem inilah yang disebut dengan sistem bilangan berbasis tiga. Artinya adalah sebuah  sistem bilangan yang memiliki tiga buah lambang bilangan. Bilangan berbasis 6 misalnya, artinya adalah sebuah sistem bilangan yang memiliki 6 buah lambang bilangan, dimulai dari 0, hingga 5. Sehari-hari, kita menggunakan bilangan desimal, bilangan berbasis 10. Artinya, bilangan desimal adalah bilangan yang memiliki 10 buah lambang bilangan, dari 0 hingga 9.

 

Sebagai pembanding, berikut adalah tabel dari ‘satu’ hingga ‘lima puluh’ dari berbagai bilangan berbasis:

 

Basis:

2 (biner)

4

7

8 (oktal)

10 (desimal)


1

1

1

1

1


10

2

2

2

2


11

3

3

3

3


100

10

4

4

4


101

11

5

5

5


110

12

6

6

6


111

13

10

7

7


1000

20

11

10

8


1001

21

12

11

9


1010

22

13

12

10


1011

23

14

13

11


1100

30

15

14

12


1101

31

16

15

13


1110

32

20

16

14


1111

33

21

17

15


10000

100

22

20

16


10001

101

23

21

17


10010

102

24

22

18


10011

103

25

23

19


10100

110

26

24

20


10101

111

30

25

21


10110

112

31

26

22


10111

113

32

27

23


11000

120

33

30

24


11001

121

34

31

25


11010

122

35

32

26


11011

123

36

33

27


11100

130

40

34

28


11101

131

41

35

29


11110

132

42

36

30


11111

133

43

37

31


100000

200

44

40

32


100001

201

45

41

33


100010

202

46

42

34


100011

203

50

43

35


100100

210

51

44

36


100101

211

52

45

37


100110

212

53

46

38


100111

213

54

47

39


101000

220

55

50

40


101001

221

56

51

41


101010

222

60

52

42


101011

223

61

53

43


101100

230

62

54

44


101101

231

63

55

45


101110

232

64

56

46


101111

233

65

57

47


110000

300

66

60

48


110001

301

100

61

49


110010

302

101

62

50

 

Wow, I can see The Truth! Pola di atas sudah jelas, jadi saya sudah ngerti basis?

Sabar dulu. Saya belum memberi tahu pola pertambahan bilangan berbasis yang lebih besar dari 10. Sekaranglah saatnya. Mari kita tinjau bilangan berbasis 11, sebuah bilangan yang terdiri dari 11 buah lambang bilangan. Seperti biasa, dimulai dari 0 hingga 9:

 

0 1 2 3 4 5 6 7 8 9

 

Kira-kira, bilangan seperti apa yang tampil setelah 9? Untuk bilangan berbasis 11, nilai ‘sepuluh’ dapat dinotasikan hanya dengan sebuah lambang bilangan. Nah, mari kita sepakati sekarang bahwa lambang bilangan yang digunakan untuk menotasikan ‘sepuluh’ adalah A, jadi lambang-lambang bilangan yang ada di basis 11 adalah:

 

0 1 2 3 4 5 6 7 8 9 A

 

Apakah anda dapat menebak bilangan apa yang muncul setelah A?  Kalau masih tidak dapat, coba ingat kembali konsep odometer, dimana sekarang digit-digit pada odometer terdiri dari 11 lambang bilangan di atas. Digit paling kanan berputar dari 0, 1, ..., 9 dan hingga A. Berputar lagi tentu saja balik lagi ke 0, disertai dengan perputaran satu pada digit di sebelah kirinya (yang tadinya 0 berupah menjadi 1). Tentu saja, setelah A, adalah 10, diikuti dengan:

 

11, 12, 13, 14, 15, 16, 17, 18, 19 ...

 

Angka apa setelah 19? Tentu saja 1A. Bagaimana cara mengeja 1A ini? Apakah dengan mengatakan ‘satu A’? Pertanyaan yang sama adalah bagaimana cara mengeja 19? Apakah ‘satu sembilan’? Anak TK juga tau bahwa cara mengeja 19 adalah ‘sembilan belas’. Kalau 19 adalah ‘sembilan belas’, maka 1A adalah ‘A belas’. Pola penambahan berikutnya adalah:

 

1A, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 40, 41, ..., 97, 98, 99, 9A

 

Angka apa setelah 9A? A ditambah satu berarti kembali ke 0, disertai dengan pertambahan satu dari 9 menjadi A. Jadi angka berikutnya adalah A0. Again, bagaimana cara mengeja A0? Dengan cara yang sama, mengejanya adalah ‘A puluh’. Pola penambahan berikutnya:

 

A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, 100, 101, 102, 103, 104, 005, 106, 107, 108, 109, 10A, 110, 111, dan seterusnya.

Seperti biasa, cara mengeja A7 misalnya, adalah ‘A puluh tujuh’.

 

Sebagai pembanding, berikut adalah  tabel dari berbagai bilangan berbasis yang lebih besar dari 10:

 

Basis

10

14

16

18

20


0

0

0

0

0


1

1

1

1

1


2

2

2

2

2


3

3

3

3

3


4

4

4

4

4


5

5

5

5

5


6

6

6

6

6


7

7

7

7

7


8

8

8

8

8


9

9

9

9

9


10

A

A

A

A


11

B

B

B

B


12

C

C

C

C


13

D

D

D

D


14

10

E

E

E


15

11

F

F

F


16

12

10

G

G


17

13

11

H

H


18

14

12

10

I


19

15

13

11

J


20

16

14

12

10


21

17

15

13

11


22

18

16

14

12


23

19

17

15

13


24

1A

18

16

14


25

1B

19

17

15


26

1C

1A

18

16


27

1D

1B

19

17


28

20

1C

1A

18


29

21

1D

1B

19


30

22

1E

1C

1A


31

23

1F

1D

1B


32

24

20

1E

1C


33

25

21

1F

1D


34

26

22

1G

1E


35

27

23

1H

1F


36

28

24

20

1G


37

29

25

21

1H


38

2A

26

22

1I


39

2B

27

23

1J


40

2C

28

24

20

 

Nah, apabila anda sudah mengerti pola di atas, maka anda telah mengerti apa itu bilangan berbasis. Mengerti bilangan berbasis, walaupun tanpa disertai pengetahuan mengenai rumus untuk melakukan konversi dari basis anu ke basis ino ataupun rumus-rumus lainnya. Ingat, rumus-rumus itu nggak penting! Oke, rumus tetap penting, nah, tugas Anda berikutnya, coba cari tahu kenapa rumusnya seperti itu J

Oke, terima kasih atas penjelasannya, apalagi sudah mau capek-capek mbuatin tabel sama kita-kita!

Yoi, sama-sama! Tapi ada beberapa yang harus saya tambahkan tentang kata capek. In fact, saya sama sekali tidak capek membuat tabel di atas. Mbuatnya pake C# lho, cuma beberapa baris. Berikut adalah source-nya, ready baked code! Just copy paste it to your favorite C# 3.0 compliance IDE.

 

static class Program
{
    static string ToBase(this int number, int toBase)
    {
        return number < toBase ? number.AsSingleChar() :
            ToBase(number / toBase, toBase) + (number % toBase).AsSingleChar();
    }

   
static string AsSingleChar(this int number)
   
{
       
return number < 10 ? number.ToString() : ((char)(number + 'A' - 10)).ToString();
   
}


   
public static void Main()
   
{
    
   Console.WriteLine("Basis\t10\t14\t16\t18\t20");
       
for (int i = 1; i <= 40; ++i)
           
Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\t{4}", i, i.ToBase(14),
                i.ToBase(16), i.ToBase(18), i.ToBase(20));
   
}
}

 

Ada beberapa orang yang bilang, solusi di atas lambat karena menggunakan rekursif. Kalau anda termasuk yang mengatakan bahwa solusi di atas lambat, maka anda belum mengerti konsep yang namanya kompleksitas algoritma. Jangan terpaku sama semua yang rekursif itu lambat. Adalah benar bahwa solusi rekursif paling lambat di antara solusi lain yang tanpa menggunakan rekursif apabila kompleksitas algoritmanya sama, tapi solusi di atas walaupun menggunakan rekursif (yang berarti solusi paling lambat) tapi kompleksitasnya algoritma adalah O(b log n) dengan b adalah basis tujuan dan n adalah bilangan yang ingin dikonversi. Kompleksitas algoritma yang ada lognya adalah salah satu yang paling baik.

 

Contoh, Anda ingin merubah bilangan 2147483647 (ini bukan bilangan ngasal lho! Ini adalah bilangan 32 bit yang paling besar) ke basis 2. Contoh ini adalah kasus terberat yang dihadapi oleh fungsi di atas, yaitu sebuah kasus di mana harus mengkonversi bilangan yang paling besar ke basis yang paling kecil.

 

Sesuai dengan rumus: b log n = 2 log 2147483647 = 31

 

Artinya apa? Artinya untuk kasus terburuk, ternyata dengan solusi di atas cuma membutuhkan 31 kali pemanggilan secara rekursif! Sangat bisa dimaafkan, jadi jangan sekali-kali menganggap solusi di atas lambat. Kalau Anda pernah memiliki pengalaman buruk dengan rekursif, coba tinjau kembali kompleksitas algoritmanya. Biasanya orang langsung memiliki pengalaman buruk dengan rekursif karena pengalaman pertama dia berkenalan dengan rekursif adalah untuk menghitung deret fibonacci. Wajar sekali kalau orang itu langsung ilfeel ama rekursif.

 

Agar lebih cepat lagi, kita dapat mengoptimasi solusi di atas. Cara paling gampang adalah menggunakan rekursif dengan pencatatan (recursive with memoization) seperti ini:

 

struct Pair<T1, T2>
{
   
public T1 First;
   
public T2 Second;
}


private static readonly IDictionary<Pair<int, int>, string> baseMemos =
    new
Dictionary<Pair<int, int>, string>();


static
string ToBase(this int number, int toBase)
{
    var key = new Pair<int, int> { First = number, Second = toBase };
        return
baseMemos.ContainsKey(key) ? baseMemos[key] :
           
baseMemos[key] = number < toBase ? number.AsSingleChar() :
               
ToBase(number / toBase, toBase) + (number % toBase).AsSingleChar();
}

 

Sekarang, saya cukup yakin dengan solusi di atas untuk dipakai dalam real world application J

Share this post: | | | |

Comments

 

irwansyah said:

Cuma untuk mengerti basis bilangan gw harus baca tulisan sepanjang ini? Keknya gw lebih pilih pake calculator di Windows aja deh ;)

March 17, 2009 5:18 PM
 

mdedirudianto said:

Wow... great!

Thanks atas penjelasannya.

Mak nyuzzz... ;)

March 18, 2009 7:21 AM
 

Risman Adnan Mattotorang said:

Dicky, now you are ready to read Knuth :).

I love this post.

March 18, 2009 4:14 PM
 

ishakahmad said:

Wow... bahkan sampe sekarang saya belum mengerti apa itu notasi bilangan. thanks for nice post pak, :D

March 18, 2009 10:54 PM
 

tahir said:

artikel yang sangat menarik, bisa buat lagu wajib para geeks... thanks

March 19, 2009 9:40 AM
 

ningsih said:

Bagus nih cara ngajarinnya, nyontek yah buat ngajarin matematika anak gue yang mualeess banget belajar,maunya nge-game mulu. Tengkyu.

March 19, 2009 11:10 AM
 

Dicky Arinal said:

@irwansyah

Hihihihi.. dasar pragmatic programmer!

@Risman

Baru ngerti bilangan berbasis masih jauh buat ngerti DE Knuth :)

All, thanks for the comments, senang bisa membantu orang laen :)

March 19, 2009 11:16 AM
 

mavia_zhia said:

haduh... java haduh lieur...

tooong lampirin logikanya buat nampilin bilangan romawi dari inputan bilangan rill.

March 23, 2009 5:44 PM
 

Syamsu said:

pertanyaanya, selain basis 10 knp hanya basis 2, 8 dan 16 yang suka dipake sama program?

Hayoo, tanya kenapa??

April 20, 2009 1:47 AM
 

BinusHacker said:

Ckcckck...cuma buat NARSIS doang nih tutorialnya, niat lurusin jang !

April 20, 2009 7:01 PM
 

Dicky Arinal said:

@Syamsu

Basis 10 digunakan di komputer karena manusia menggunakan basis 10. Jadi yang menggunakan basis 10 itu manusia, biar gampang manusia menggunakan komputer.

Kenapa basis 2? Karena implementasi komputer adalah digital, dimana cuma memiliki dua state, 1 dan 0. Kenapa 8 dan 16? Karena mereka semua kelipatan 2!

Bayangkan kalau ada angka:

0111 0101

akan lebih mudah kalau ditulis dengan heksa:

7 5

gitu bro!

May 13, 2009 3:41 PM
 

Z3N said:

Apaan seh ene!

Gak guna banget dah jelasin panjang lebar.

Cuma mo buat cewe cewe sama cowo cowo terpukau. Intinya biar kiatan IQ nya 200 ye..

Bruakakakakaka...

*Ngakak sampe terpingkal²

June 13, 2009 11:21 AM