Jumat, 20 Januari 2012
2
Jumat, 20 Januari 2012
Nurkholish Ardi Firdaus
[C] Program Konversi Bilangan Biner ke Desimal
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;
}
Langganan:
Postingan (Atom)