Jumat, 20 Januari 2012

2

[C] Program Konversi Bilangan Biner ke Desimal

  • Jumat, 20 Januari 2012
  • Nurkholish Ardi Firdaus
  • Ketika saya mempelajari tentang bab "Representasi Data" dalam buku pembelajaran bahasa assembly untuk x86 proccessor terdapat tantangan bagi pembaca untuk membuat program konversi bilangan biner kedalam representasi bilangan bulatnya dalam bahasa C untuk mengetes pemahaman para pembaca dalam memahami konsepnya. Ini memang buku yang sangat menarik untuk dibaca, yaitu "Assembly Language for x86 Processors 6th Edition", anda harus membacanya! ;). Berikut adalah source codenya menurut pemahaman saya sendiri. Hope u enjoy it! :)





    ////////////////////////////////////////////////////////////////////////////////
    ///                       UNIVERSITAS NEGERI SEMARANG                        ///
    ///                             Fakultas Teknik                              ///
    ///                         Jurusan Teknik Elektro                           ///
    ///                Pendidikan Teknik Informatika dan Komputer                ///
    ///                     coded by Nurkholish Ardi Firdaus                     ///
    ////////////////////////////////////////////////////////////////////////////////
    //
    // Program Name: Representasi Bilangan Biner Kedalam Bilangan Bulat
    // Reference   : [ebook] Assembly Language for x86 Processors 6th Edition
    //
    ////////////////////////////////////////////////////////////////////////////////
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
        //////////////////////////////////////////
        //                                      //
        // Jika Unsigned, dimulai dari MSB      //
        //                                      //
        //////////////////////////////////////////
        const   int Most_Significant_Bit = 0;
        //////////////////////////////////////////
        //                                      //
        // Jika Signed, dimulai dari LSB        //
        //                                      //
        //////////////////////////////////////////
        const   int Least_Significant_Bit = 63;
        //////////////////////////////////////////
    
        int     i;
        int     bin[64] = {0};
        char    user_bin[64] = {'0'};
        char    *pC;
        int     begin;
        int     step;
    
        long long result = 0;
    
        printf("Masukkan Angka Biner: ");
        scanf("%64s",user_bin);              //64-bit: batas Quadword
        pC = user_bin + strlen(user_bin) - 1;
        // mencopy data biner bertipe char dari user kedalam array integer
        for (i=Least_Significant_Bit; i>=0; i--) {
            if (pC[0] == '0') break;
            if (pC[0] == '1') bin[i] = 1;
            pC--;
        }
    
        if (bin[Most_Significant_Bit] == 1) {  // if signed
            begin = Most_Significant_Bit;
            step = 1;
        }
        else {
            begin = Least_Significant_Bit;
            step = -1;
        }
    
        if (step == 1) {   // if signed
            result = -(unsigned long long) pow((double) 2, (double)63);
            for (i=begin+1; i<=Least_Significant_Bit; i += step) {
                if (bin[i] == 1) {
                    result += (unsigned long long) pow((double) 2, (double)abs(i-63));
                }
            }
        }
        else {
            result = 0;
            for (i=begin; i>=Most_Significant_Bit; i += step) {
                if (bin[i] == 1) {
                    result += (unsigned long long) pow((double) 2, (double)abs(i-63));
                }
            }
        }
    
        printf("%s","\nRepresentasi Angka Bulat dari \n");
        for (i=0; i<=63; i++) {
            if ((i % 4) == 0) putchar(' ');
            if ((i % 32) == 0) putchar('\n');
            printf("%d",bin[i]);
        }
        printf("nnAdalah: %lldn",result);
        return 0;
    }

    Subscribe