#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int *decToBin(int decimal, int numBits, int binary[]) {
int tmp, i;
tmp = --numBits;
for(i=tmp; i>=0; i--)
binary[i] = 0;
while (decimal > 0) {
binary[numBits--] = decimal%2;
decimal/=2;
}
return binary;
}
char check(int dec)
{
switch(dec)
{
case 10: return 'A';
case 11: return 'B';
case 12: return 'C';
case 13: return 'D';
case 14: return 'E';
case 15: return 'F';
}
}
void real()
{
int *binary,*eksponensial,*bin,*bin1,i,j,add_r=0,eks=0,power,flag;
char str[10];
int bit_eks,bitx,bit_mantissa,numBits,dec_temp,dec_r_temp;
float dec,dec1,new_dec,dec_l,dec_r;
printf("REAL POINT REPRESENTATION\n");
printf("=========================\n\n");
printf("Number bits of mantissa= ");
scanf("%d",&bit_mantissa);
printf("Number bits of eksponential= ");
scanf("%d",&bit_eks);
printf("Decimal Number= ");
scanf("%f",&dec);
//printf("%f",dec);
printf("\n");
//================FOR HEXADECIMAL===================
if(dec<0)
dec1=-dec;
else
dec1=dec;
printf("Hexa= %s",itoa(dec1, str, 16));
bin=(int *)malloc(sizeof(int)*(bit_mantissa/4));
if(dec<0)
{
new_dec=-1*dec;
flag=1;
}
else
new_dec=dec;
//printf("\n\n%f\n\n",new_dec);
if((new_dec>0)&&(new_dec<1))
{
printf(".");
add_r=0;
i=0;
dec_r=new_dec;
//dec_r_eks=new_dec;
while(i<=(bit_mantissa/4))
{
dec_temp=dec_r*16;
bin[i]=dec_temp;
if(dec_temp<=9)
printf("%d",bin[i]);
else
printf("%c",check(bin[i]));
dec_r=dec_r*16-dec_temp;
i++;
//if(dec_temp!=0)
// add_r++;
}
i=0;
while(bin[i]==0) //checking exponential
{
eks++;
i++;
}
eks=-eks;
}
else
{
dec_l=new_dec;
eks=0;
//printf("\n%f\n",dec_l);
while (dec_l>1)
{
dec_l/=16;
//printf("%f\n",dec_l);
eks++;
}
add_r=0;
//printf("masuk2");
/*if(dec<0)
dec_temp=floor(new_dec);
else*/
dec_temp=floor(new_dec);
dec_r=new_dec-dec_temp;
//printf("\n\n%f\n\n",new_dec);
if(dec_r>0 && dec_r<1)
{
printf(".");
add_r=0;
while(add_r<(bit_mantissa/4))
{
dec_temp=dec_r*16;
bin[add_r]=dec_temp;
if(dec_temp<=9)
printf("%d",bin[add_r]);
else
printf("%c",check(bin[add_r]));
dec_r=dec_r*16-dec_temp;
add_r++;
}
}
else if(dec_r==0)
{
add_r=0;
while(add_r<(bit_mantissa/4))
{
bin[add_r]=0;
add_r++;
}
}
}
power=pow(2,bit_eks)/2; //1024
printf("\n\nFPR for R=16\n");
//sign
if(flag==1)
{
printf("1 ");
}
else
{
printf("0 ");
//bitx=power+eks;
}
//bikin eksponensial
bitx=power+eks;
//printf("%d %d %d",eks,power,bitx);
//nampilin eksponensial
eksponensial = (int *)malloc(sizeof(int)* bit_eks);
eksponensial=decToBin(bitx, bit_eks, eksponensial);
for (i=0; i<bit_eks; i++)
printf("%d", eksponensial[i]);
printf(" ");
//nampilin mantissa
if((new_dec>0)&&(new_dec<1))
{
binary = (int *)malloc(sizeof(int)*4);
add_r=-eks;
j=0;
while(j<(bit_mantissa/4))
{
binary = decToBin(bin[add_r],4,binary);
for (i=0; i<4; i++)
printf("%d", binary[i]);
j++;
add_r++;
}
}
else
{
dec_temp=new_dec;
j=0;
//printf("%d",dec_temp);
numBits=eks*4;
//printf("%d %d", numBits,eks);
binary = (int *)malloc(sizeof(int)* numBits);
/*while(dec_temp>0)
{
dec_temp1=dec_temp % 16;
binary = decToBin(dec_temp1,4,binary);
for (i=0; i<4; i++)
printf("%d", binary[i]);
j++;
dec_temp/=16;
}*/
binary = decToBin(dec_temp, numBits, binary);
for (i=0; i<numBits; i++)
printf("%d", binary[i]);
add_r=0;
j=eks;
while(j<(bit_mantissa/4))
{
binary = decToBin(bin[add_r],4,binary);
for (i=0; i<4; i++)
printf("%d", binary[i]);
j++;
add_r++;
}
/*binary = decToBin(dec,numBits,binary);
for (i=0; i<numBits; i++)
printf("%d", binary[i]);
for(i=1;i<=(bit_mantissa-numBits);i++)
printf("0");
printf("\n\n");*/
}
printf("\n\n");
//=====================OCTAL===============================
printf("Octal= %s",itoa(dec1, str, 8));
bin=(int *)malloc(sizeof(int)*(ceil(bit_mantissa/3)));
if(dec<0)
{
new_dec=-1*dec;
flag=1;
}
else
new_dec=dec;
//printf("\n\n%f\n\n",new_dec);
eks=0;
if((new_dec>0)&&(new_dec<1))
{
printf(".");
add_r=0;
i=0;
dec_r=new_dec;
//dec_r_eks=new_dec;
while(i<=(bit_mantissa/2))
{
dec_temp=dec_r*8;
bin[i]=dec_temp;
printf("%d",bin[i]);
dec_r=dec_r*8-dec_temp;
i++;
//if(dec_temp!=0)
//add_r++;
}
i=0;
while(bin[i]==0)
{
eks++;
i++;
}
eks=-eks;
}
else
{
dec_l=new_dec;
eks=0;
//printf("\n%f\n",dec_l);
while (dec_l>1)
{
dec_l/=8;
//printf("%f\n",dec_l);
eks++;
}
add_r=0;
//printf("masuk2");
/*if(dec<0)
dec_temp=-floor(dec);
else*/
dec_temp=floor(new_dec);
dec_r=new_dec-dec_temp;
//printf("\n\n%f\n\n",new_dec);
if(dec_r>0 && dec_r<1)
{
printf(".");
add_r=0;
while(add_r<(ceil(bit_mantissa/3)))
{
dec_temp=dec_r*8;
bin[add_r]=dec_temp;
printf("%d",bin[add_r]);
dec_r=dec_r*8-dec_temp;
add_r++;
}
}
else if(dec_r==0)
{
add_r=0;
while(add_r<(ceil(bit_mantissa/3)))
{
bin[add_r]=0;
add_r++;
}
}
}
power=pow(2,bit_eks)/2; //1024
printf("\n\nFPR for R=8\n");
//sign
if(flag==1)
{
printf("1 ");
}
else
{
printf("0 ");
//bitx=power+eks;
}
//bikin eksponensial
bitx=power+eks;
//printf("%d %d %d",eks,power,bitx);
//nampilin eksponensial
eksponensial = (int *)malloc(sizeof(int)* bit_eks);
eksponensial=decToBin(bitx, bit_eks, eksponensial);
for (i=0; i<bit_eks; i++)
printf("%d", eksponensial[i]);
printf(" ");
//nampilin mantissa
if((new_dec>0)&&(new_dec<1))
{
binary = (int *)malloc(sizeof(int)*3);
add_r=-eks;
j=0;
while(j<(ceil(bit_mantissa/3)))
{
binary = decToBin(bin[add_r],3,binary);
for (i=0; i<3; i++)
printf("%d", binary[i]);
j++;
add_r++;
}
}
else
{
dec_temp=new_dec;
j=0;
//printf("%d",dec_temp);
numBits=eks*3;
//printf("%d %d", numBits,eks);
binary = (int *)malloc(sizeof(int)* numBits);
/*while(dec_temp>0)
{
dec_temp1=dec_temp % 16;
binary = decToBin(dec_temp1,4,binary);
for (i=0; i<4; i++)
printf("%d", binary[i]);
j++;
dec_temp/=16;
}*/
binary = decToBin(dec_temp, numBits, binary);
for (i=0; i<numBits; i++)
printf("%d", binary[i]);
add_r=0;
j=eks;
while(j<(ceil(bit_mantissa/3)))
{
binary = decToBin(bin[add_r],3,binary);
for (i=0; i<3; i++)
printf("%d", binary[i]);
j++;
add_r++;
}
/*binary = decToBin(dec,numBits,binary);
for (i=0; i<numBits; i++)
printf("%d", binary[i]);
for(i=1;i<=(bit_mantissa-numBits);i++)
printf("0");
printf("\n\n");*/
}
printf("\n\n");
//==============BINARY===================
printf("Binary= %s",itoa(dec1, str, 2));
bin=(int *)malloc(sizeof(int)*(ceil(bit_mantissa)));
if(dec<0)
{
new_dec=-1*dec;
flag=1;
}
else
new_dec=dec;
//printf("\n\n%f\n\n",new_dec);
eks=0;
if((new_dec>0)&&(new_dec<1))
{
printf(".");
add_r=0;
i=0;
dec_r=new_dec;
//dec_r_eks=new_dec;
while(i<=(ceil(bit_mantissa)))
{
dec_temp=dec_r*2;
bin[i]=dec_temp;
printf("%d",bin[i]);
dec_r=dec_r*2-dec_temp;
i++;
//if(dec_temp!=0)
// add_r++;
}
i=0;
while(bin[i]==0)
{
eks++;
i++;
}
eks=-eks;
}
else
{
dec_l=new_dec;
eks=0;
//printf("\n%f\n",dec_l);
while (dec_l>1)
{
dec_l/=2;
//prin