⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpr.cpp

📁 This program is to find the floating point representation of real number. The user will be asked
💻 CPP
字号:
#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;
			//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)))
			{
				dec_temp=dec_r*2;
				bin[add_r]=dec_temp;
				printf("%d",bin[add_r]);
				
				dec_r=dec_r*2-dec_temp;
				add_r++;
			}
		}
		else if(dec_r==0)
		{
			add_r=0;
			while(add_r<(ceil(bit_mantissa)))
			{
				bin[add_r]=0;
				add_r++;
			}
		}
		
	}
	power=pow(2,bit_eks)/2; //1024

	printf("\n\nFPR for R=2\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)*1);	
		add_r=-eks;
		j=0;
		while(j<(ceil(bit_mantissa)))
		{
			binary = decToBin(bin[add_r],1,binary);		
			for (i=0; i<1; i++)
				printf("%d", binary[i]);
			j++;
			add_r++;
		}

		
	}
	else
	{

		dec_temp=new_dec;
		j=0;
		//printf("%d",dec_temp);
		numBits=eks;
		//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)))
		{
			binary = decToBin(bin[add_r],1,binary);		
			for (i=0; i<1; 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");

}

void main()
{
	int choice;
	do
	{
		real();
		printf("Wanna try again (1 = yes or 0 = no) ?! ");
		scanf("%d",&choice);
		printf("\n\n");
	}
	while(choice!=0);
			
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -