featured-image-program-c-untuk-konversi-bilangan-desimal-ke-biner-2

Program C untuk Konversi Bilangan Desimal ke Bilangan Biner

Pada kesempatan ini, akan dibahas contoh program untuk melakukan konversi bilangan dalam representasi desimal ke bilangan dalam representasi biner.

Pengenalan

Bilangan desimal merupakan sistem bilangan yang umum kita pakai dalam kehidupan sehari-hari, yang mana satu digit angka dalam bilangan desimal dapat berupa angka 0, 1, 2, 3, 4, 5, 6, 7, 8, atau 9. Terdapat 10 ragam nilai yang dapat kita gunakan dalam 1 digit bilangan desimal. Oleh karenanya, bilangan desimal juga disebut sebagai bilangan basis 10. Untuk menunjukkan basis 10, terkadang bilangan dituliskan dengan format x10.

Bilangan biner merupakan sistem bilangan yang digit-digitnya terdiri dari nilai 0 atau 1. Satu digit bilangan biner dapat bernilai 1 atau 0. Karena hanya terdiri dari 0 dan 1, bilangan biner juga disebut sebagai bilangan basis 2. Untuk menunjukkan basisnya, biasanya bilangan biner dituliskan dengan format x2. Bilangan biner digunakan dalam sistem digital, termasuk komputer digital.

Di bawah ini ditunjukkan beberapa bilangan dalam representasi desimal dan binernya.

 DESIMAL     BINER
  0      =       0
  1      =       1
  2      =      10
  3      =      11
  4      =     100
  5      =     101
  6      =     110
  7      =     111
  8      =    1000
 15      =    1111
 16      =   10000
 31      =   11111
 32      =  100000
 63      =  111111
 64      = 1000000

Desimal vs Biner

Kita mengenal istilah satuan, puluhan, ratusan, ribuan, dan seterusnya dalam pelajaran Matematika di bangku sekolah dasar. Misalnya, bilangan 354, terdiri dari 3 ratusan, 5 puluhan, dan 4 satuan. Angka 3 dalam 354 disebut sebagai ratusan karena memiliki nilai 300, yaitu 3 x 100. Sedangkan 5 disebut sebagai puluhan karena 5 dalam 354 memiliki nilai 50, yaitu 5 x 10. Begitu pula dengan 4 disebut sebagai satuan karena mewakili nilai 4 x 1 = 4.

354 = 3 ratusan + 5 puluhan + 4 satuan
354 = 300       + 50        + 4
354 = (3 x 100) + (5 x 10)  + (4 x 1)
354 = (3 x 102) + (5 x 101) + (4 x 100)

Pada dasarnya, bilangan dalam representasi biner dapat dijabarkan dengan cara yang serupa. Pada contoh di bawah ini kita akan membandingkan keduanya.

5410 = 5 puluhan + 4 satuan
5410 = 50        + 4
5410 = (5 x 10)  + (4 x 1)
5410 = (5 x 101) + (4 x 100)
1101102 = (1 x 25) + (1 x 24) + (0 x 23) + (1 x 22) + (1 x 21) + (0 x 20)
1101102 = (1 x 32) + (1 x 16) + (0 x 8)  + (1 x 4)  + (1 x 2)  + (0 x 1)
1101102 = 32       + 16       + 0        + 4        + 2        + 0
1101102 = 5410

Meskipun bukan merupakan pembahasan kita pada materi ini, contoh di atas telah menunjukkan bagaimana konversi dari bilangan biner ke bilangan desimal.

Konversi Desimal -> Biner

Untuk melakukan konversi dari bilangan desimal ke bilangan biner, kita akan menggunakan algoritma “divide by 2”, alias “dibagi 2”. Dalam algoritma ini, diasumsikan bahwa bilangan yang akan dikonversi memiliki nilai > 0.

Algoritma ini menggunakan sisa dari hasil pembagian dengan 2 untuk memperoleh digit-digit biner. Misalnya,

  • 10 / 2 = 5 sisa 0,
  • 5 / 2 = 2 sisa 1.

Sisa bagi ini sering juga disebut sebagai modulo dalam Matematika, sehingga

  • 10 modulo 2 = 0,
  • 5 modulo 2 = 1.

Dengan berdasar pada sifat bilangan ganjil dan genap dapat kita katakan bahwa

  • semua bilangan ganjil di-modulo-2 sama dengan 1, dan
  • semua bilangan genap di-modulo-2 sama dengan 0.

Dengan berbekal dasar tersebut, contoh di bawah ini akan menunjukkan langkah-langkah konversi bilangan desimal ke bilangan biner.

35410 = ...2
354 / 2 = 177 sisa 0             0
177 / 2 = 88  sisa 1            10
88  / 2 = 44  sisa 0           010
44  / 2 = 22  sisa 0          0010
22  / 2 = 11  sisa 0         00010
11  / 2 = 5   sisa 1        100010
5   / 2 = 2   sisa 1       1100010
2   / 2 = 1   sisa 0      01100010
1   / 2 = 0   sisa 1     101100010
35410 = 1011000102

Kode Program

Metode 1

Pada kode program di bawah ini, kita akan menggunakan tipe data integer (int) baik untuk input desimal maupun output biner. Seolah-olah keduanya merupakan bilangan desimal. Tujuan penggunaan int adalah agar kita dapat menggunakan bilangan hasil perpangkatan dari 10 untuk memasukkan sebuah digit biner. Sehingga, untuk menyusun rangkaian digit biner 1101, kita dapat melakukannya dengan cara:

1 * 100 = 1 *    1  =     1
0 * 101 = 0 *   10  =     0
1 * 102 = 1 *  100  =   100
1 * 103 = 1 * 1000  =  1000
                     -------- +
                       1101

Catatan:
Metode ini hanya mampu menyimpan jumlah digit maksimal bergantung dengan nilai maksimal yang dapat disimpan menggunakan tipe data int. Misalnya, di compiler di komputer saya menggunakan 4 byte untuk menyimpan nilai dengan tipe data int. Oleh karena itu, maksimal nilai desimal yang dapat dikonversi adalah 102310 atau 11111111112 dalam biner.

File 00000-konversi-desimal-ke-biner.c

#include <stdio.h>
// Fungsi untuk konversi dari desimal ke biner
int dec2bin(int decimal) {
    int binary = 0,  // Output bilangan biner
        bit,         // Sebuah digit biner hasil modulo 2
        exp_10 = 1;  // 10^0, 10^1, 10^2 ...
                     // Pangkat 0, 1, 2, ... sesuai banyaknya digit biner
                     // Dimulai dengan nilai awal 10^0 = 1
    while(decimal > 0) {
        // Modulo 2 dari `decimal` menghasilkan sebuah digit biner
        bit = decimal % 2;
        // Masukkan digit biner `bit` ke dalam `binary`
        binary += exp_10 * bit;
        // Kerjakan `decimal / 2` dan masukkan hasil baginya ke `decimal`
        decimal /= 2;
        // Kalikan 10 untuk menaikkan pangkat dari 10.
        // 1   * 10 = 10^1 = 10
        // 10  * 10 = 10^2 = 100
        // 100 * 10 = 10^3 = 1000
        exp_10 *= 10;
    }
    return binary;
}
int main() {
    int decimal, // Input bilangan desimal
        binary;  // Output bilangan biner
    printf("Masukkan bilangan desimal: ");
    scanf("%d", &decimal);
    binary = dec2bin(decimal);
    printf("Bilangan desimal %d = %d dalam sistem bilangan biner\n", decimal, binary);
    return 0;
}

Output

Masukkan bilangan desimal: 354
Bilangan desimal 354 = 101100010 dalam sistem bilangan biner

Metode 2

Dalam metode 2 ini, kita akan menggunakan string untuk menyimpan representasi biner. Kita akan melakukan konkatinasi (concatination) digit biner pada string biner. Misalnya, di bawah ini kita akan menyusun rangkaian digit biner 1101.

concat(    "", "1" ) =    "1"
concat(   "1", "1" ) =   "11"
concat(  "11", "0" ) =  "011"
concat( "011", "1" ) = "1011"

Dengan cara ini, karena kita menggunakan string biner, permasalahan pada metode 1 tidak terjadi lagi. Sehingga tidak ada masalah dengan batasan nilai maksimal yang dapat disimpan pada variabel bertipe integer.

File 00001-konversi-desimal-ke-biner.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Fungsi untuk menyatukan 2 string
char* concat(const char *s1, const char *s2) {
    char *result = malloc(strlen(s1)+strlen(s2)+1); // +1 untuk zero-terminator
    strcpy(result, s1);
    strcat(result, s2);
    return result;
}
// Fungsi untuk konversi dari desimal ke biner
char* dec2bin(int decimal) {
    int bit;           // Sebuah digit biner hasil modulo 2
    char bitString[1]; // Sebuah digit biner hasil modulo 2 sebagai string
    char *binary = ""; // Output biner
    while(decimal > 0) {
        // Modulo 2 dari `decimal` menghasilkan sebuah digit biner
        bit = decimal % 2;
        // Masukkan string yang merepresentasikan `bit` ke dalam `bitString`
        sprintf(bitString, "%d", bit);
        // Masukkan digit biner `bit` ke dalam `binary`
        binary = concat(bitString, binary);
        // Kerjakan `decimal / 2` dan masukkan hasil baginya ke `decimal`
        decimal /= 2;
    }
    return binary;
}
int main() {
    int decimal;   // Input bilangan desimal
    char *binary;  // Output bilangan biner
    printf("Masukkan bilangan desimal: ");
    scanf("%d", &decimal);
    binary = dec2bin(decimal);
    printf("Bilangan desimal %d = %s dalam sistem bilangan biner\n", decimal, binary);
    return 0;
}

Output

Masukkan bilangan desimal: 315141
Bilangan desimal 315141 = 1001100111100000101 dalam sistem bilangan biner

Muhammad Ikhsan

Senang belajar dan berbagi ilmu.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *