#include<stdio.h>
/*Function declaration*/
int fn_find_sign_bit(long numbertocheck);
long fn_convert_to_binary(long numbertoconvert);
int fn_find_binary_length(long numberinbinary);
void fn_binary_to_array(int expectedarraysize,long numberinbinary,int actualbinarylength,int* array);
long fn_generate_exponent_binary(int exponentdecimalnumber);
/*Main Function*/
int main(){
long firstinput,secondinput;
long originalfirstinput,originalsecondinput;
int firstnumbersign,secondnumbersign;
long firstnumberbinary,secondnumberbinary;
int firstbinarylength,secondbinarylength;
int exponentnumber,exponentshifter;
long finalexponentbinary;
int finalarraysize=23;
int firstsmall=0;
int secsamll=0;
int firbintoarray[finalarraysize];
int secbintoarray[finalarraysize];
int firbtwointoarray[finalarraysize];
int secbtwointoarray[finalarraysize];
int finalresultarray[finalarraysize];
int carry=1;
printf("Enter first Input\n"); scanf("%ld",&firstinput
); printf("Enter second Input\n"); scanf("%ld",&secondinput
);
originalfirstinput=firstinput;
originalsecondinput=secondinput;
/*Finding the sign bit*/
firstnumbersign=fn_find_sign_bit(firstinput);
secondnumbersign=fn_find_sign_bit(secondinput);
/*converting the sign*/
if(firstinput<0){
firstinput=-1*firstinput;
}
if(secondinput<0){
secondinput=-1*secondinput;
}
if(firstinput<secondinput){
firstsmall=1;
}else{
secsamll=1;
}
/*Finding the binary format*/
firstnumberbinary=fn_convert_to_binary(firstinput);
secondnumberbinary=fn_convert_to_binary(secondinput);
printf("First Binary %ld",firstnumberbinary
); printf("Second Binary %ld",secondnumberbinary
);
/*Finding the binary format length*/
firstbinarylength=fn_find_binary_length(firstnumberbinary);
secondbinarylength=fn_find_binary_length(secondnumberbinary);
printf("First Binary length %d",firstbinarylength
); printf("Second Binary length %d",secondbinarylength
);
/*Finding the number for exponent*/
if(firstbinarylength>secondbinarylength){
exponentnumber=(firstbinarylength-1);
exponentshifter=firstbinarylength-secondbinarylength;
}else{
exponentnumber=(secondbinarylength-1);
exponentshifter=secondbinarylength-firstbinarylength;
}
printf("\n----------------------------------------------------------------------------\n"); printf("*** %d shift(s) required for aligning mantissa to make exponents equal *** \n",exponentshifter
); finalexponentbinary=fn_generate_exponent_binary(exponentnumber);
printf("------------------------------------------------------------------------------\n\n");
fn_binary_to_array(exponentnumber,firstnumberbinary,(firstbinarylength-1),firbintoarray);
fn_binary_to_array(exponentnumber,secondnumberbinary,(secondbinarylength-1),secbintoarray);
printf("----------------------------------------------------------------------------\n"); printf("32 Bit Floating Format for %ld is %d %ld ",originalfirstinput
,firstnumbersign
,finalexponentbinary
); for(int icount1=0;icount1<sizeof(firbintoarray)/sizeof(firbintoarray[0]);icount1++){
printf("%d",firbintoarray
[icount1
]); }
printf("----------------------------------------------------------------------------\n"); printf("----------------------------------------------------------------------------\n"); printf("32 Bit Floating Format for %ld is %d %ld ",originalsecondinput
,secondnumbersign
,finalexponentbinary
); for(int icount1=0;icount1<sizeof(secbintoarray)/sizeof(secbintoarray[0]);icount1++){
printf("%d",secbintoarray
[icount1
]); }
printf("----------------------------------------------------------------------------\n"); if( firstnumbersign != secondnumbersign ){
if(firstsmall==1){
/*Finding ones Complement*/
for(int size=0;size<(sizeof(firbintoarray)/sizeof(firbintoarray[0]));size++){
if(firbintoarray[size]==0){
firbintoarray[size]=1;
}else if (firbintoarray[size]==1){
firbintoarray[size]=0;
}
}
/*Finding twos Complement*/
for(int size=((sizeof(firbintoarray)/sizeof(firbintoarray[0]))-1); size>=0; size--)
{
if(firbintoarray[size]==1 && carry==1)
{
firbtwointoarray[size] = 0;
}
else if(firbintoarray[size]==0 && carry==1)
{
firbtwointoarray[size] = 1;
carry = 0;
}
else
{
firbtwointoarray[size] = firbintoarray[size];
}
}
for(int size=0;size<=(sizeof(secbintoarray)/sizeof(secbintoarray[0]));size++){
secbtwointoarray[size]=secbintoarray[size];
}
}else if (secsamll==1){
/*Finding ones complement*/
for(int size=0;size<(sizeof(secbintoarray)/sizeof(secbintoarray[0]));size++){
if(secbintoarray[size]==0){
secbintoarray[size]=1;
}else if (secbintoarray[size]==1){
secbintoarray[size]=0;
}
}
/*Finding twos Complement*/
for(int size=((sizeof(secbintoarray)/sizeof(secbintoarray[0]))-1); size>=0; size--)
{
if(secbintoarray[size]==1 && carry==1)
{
secbtwointoarray[size] = 0;
}
else if(secbintoarray[size]==0 && carry==1)
{
secbtwointoarray[size] = 1;
carry = 0;
}
else
{
secbtwointoarray[size] = secbintoarray[size];
}
}
for(int size=0;size<=(sizeof(firbintoarray)/sizeof(firbintoarray[0]));size++){
firbtwointoarray[size]=firbintoarray[size];
}
}
printf("\nMantissa after finding two's complement of the small number\n"); printf("----------------------------------------------------------------------------\n"); for(int icount1=0;icount1<sizeof(firbtwointoarray)/sizeof(firbtwointoarray[0]);icount1++){
printf("%d",firbtwointoarray
[icount1
]); }
for(int icount1=0;icount1<sizeof(secbtwointoarray)/sizeof(secbtwointoarray[0]);icount1++){
printf("%d",secbtwointoarray
[icount1
]); }
printf("----------------------------------------------------------------------------\n"); carry=0;
/*Addition of Mantissa*/
for(int size=((sizeof(firbtwointoarray)/sizeof(firbtwointoarray[0]))-1);size>=0;size--){
if(firbtwointoarray[size]==0 && secbtwointoarray[size] ==0 && carry==0){
finalresultarray[size]=0;
carry=0;
}else if(firbtwointoarray[size]==0 && secbtwointoarray[size] ==0 && carry==1){
finalresultarray[size]=1;
carry=0;
}else if(firbtwointoarray[size]==0 && secbtwointoarray[size] ==1 && carry==1){
finalresultarray[size]=0;
carry=1;
}else if(firbtwointoarray[size]==1 && secbtwointoarray[size] ==1 && carry==1){
finalresultarray[size]=1;
carry=1;
}else if(firbtwointoarray[size]==1 && secbtwointoarray[size] ==1 && carry==0){
finalresultarray[size]=0;
carry=1;
}else if(firbtwointoarray[size]==1 && secbtwointoarray[size] ==0 && carry==0){
finalresultarray[size]=1;
carry=0;
}else if(firbtwointoarray[size]==0 && secbtwointoarray[size] ==0 && carry==0){
finalresultarray[size]=0;
carry=0;
}else if(firbtwointoarray[size]==0 && secbtwointoarray[size] ==1 && carry==0){
finalresultarray[size]=1;
carry=0;
}else if(firbtwointoarray[size]==1 && secbtwointoarray[size] ==0 && carry==1){
finalresultarray[size]=0;
carry=1;
}
}
}
else{
printf("\nTwo's complement not required and below Mantissa will be sued for addition\n"); carry=0;
/*Addition of Mantissa*/
for(int size=((sizeof(firbintoarray)/sizeof(firbintoarray[0]))-1);size>=0;size--){
if(firbintoarray[size]==0 && secbintoarray[size] ==0 && carry==0){
finalresultarray[size]=0;
carry=0;
}else if(firbintoarray[size]==0 && secbintoarray[size] ==0 && carry==1){
finalresultarray[size]=1;
carry=0;
}else if(firbintoarray[size]==0 && secbintoarray[size] ==1 && carry==1){
finalresultarray[size]=0;
carry=1;
}else if(firbintoarray[size]==1 && secbintoarray[size] ==1 && carry==1){
finalresultarray[size]=1;
carry=1;
}else if(firbintoarray[size]==1 && secbintoarray[size] ==1 && carry==0){
finalresultarray[size]=0;
carry=1;
}else if(firbintoarray[size]==1 && secbintoarray[size] ==0 && carry==0){
finalresultarray[size]=1;
carry=0;
}else if(firbintoarray[size]==0 && secbintoarray[size] ==0 && carry==0){
finalresultarray[size]=0;
carry=0;
}else if(firbintoarray[size]==0 && secbintoarray[size] ==1 && carry==0){
finalresultarray[size]=1;
carry=0;
}else if(firbintoarray[size]==1 && secbintoarray[size] ==0 && carry==1){
finalresultarray[size]=0;
carry=1;
}
}
}
printf("\nResult after addition\n"); printf("----------------------------------------------------------------------------\n"); if(firstsmall==1){
printf("%d",secondnumbersign
); }else{
}
printf(" %ld ",finalexponentbinary
); for(int size=0;size<sizeof(finalresultarray)/sizeof(finalresultarray[0]);size++){
printf("%d",finalresultarray
[size
]); }
printf("----------------------------------------------------------------------------\n"); return 0;
}
/*Function to find the exponent part*/
long fn_generate_exponent_binary(int exponentdecimalnumber){
exponentdecimalnumber=exponentdecimalnumber+127;
return fn_convert_to_binary(exponentdecimalnumber);
}
/*Function to convert binary into array*/
void fn_binary_to_array(int expectedarraysize,long numberinbinary,int actualbinarylength,int* array){
int finalarraysize=23;
int binarytoarray[finalarraysize];
for(int icountshifter=0;icountshifter<finalarraysize;icountshifter++){
array[icountshifter]=0;
}
for(int icount=0;icount<=(actualbinarylength);icount++){
if(icount<(actualbinarylength)){
array[(expectedarraysize-(1+icount))]=numberinbinary%10;
numberinbinary=numberinbinary/10;
}
}
}
/*Function to find out the sign bit*/
int fn_find_sign_bit(long numbertocheck){
if (numbertocheck < 0){
return 1;
}else{
return 0;
}
}
/* Function to convert to binary format */
long fn_convert_to_binary(long numbertoconvert) {
long binaryformat=0;
int remainder, positionadjuster=1;
while(numbertoconvert != 0){
remainder = numbertoconvert%2;
binaryformat=binaryformat+(remainder*positionadjuster);
numbertoconvert=numbertoconvert/2;
positionadjuster=positionadjuster*10;
}
return binaryformat;
}
/*Function to find the length of binary number*/
int fn_find_binary_length(long numberinbinary){
int numberlength=0;
while(numberinbinary){
numberinbinary=numberinbinary/10;
numberlength=numberlength+1;
}
return numberlength;
}