C语言机器数的表示

给出一个十进制数,可以是整数,也可以是小数。经过数据处理之后,输出这个数的原码,反码,补码,和移码的表示方法。其中整数部分和小数部分分别用32位机器数表示。
#include "stdio.h"
#include 
#include 
#define TTWO 32
#define TONE 31
//*x>-2147483648	 && x<2147483648;
void integertrueform(int x,int map[])
{	if(x>=0) map[TONE]=0;
	if(x<0) {map[TONE]=1; x=-x;}
	int i=1; 
    while(x&&(i-TTWO))	
    {
    	map[i-1]=x%2;
     	i++;
     	x=x/2;
 	}
}
void decimaltrueform(double x,int map[])
{	if(x>=0) map[TONE]=0;
	if(x<0) {map[TONE]=1; x=-x;}
	int i=TONE;
	while(x!=0&&i)
	{	x=x*2;
		if(x>=1) {map[i-1]=1;x--;}
		else map[i-1]=0;
		i--;
	}	
}
void ptrueform(int map[])
{
	int i=TTWO;
	while(i)
 	{
 		printf("%d",map[i-1]); 
        i--;
 	}
}
int onescomplement(int map[])
{	int i;
	if(map[TONE]==0)
	{ 
		return 0;	
	}
	else
	{	i=TONE;

		while(i>0)
		{
			if(map[i-1]==1)	 map[i-1]=0;
			else 	map[i-1]=1;
			i--;	
		}
		
	} 
}
void ponescomplement(int map[])
{
	int i=TTWO;
	while(i>0)
	{
		printf("%d",map[i-1]); 
		i--;
	}
}
int complemental(int map[])
{	if(map[TONE]==0) return 0;
	else
	{	int i=0;
		while(map[i]&&i<TTWO)
		{
			map[i++]=0;
		}
		map[i]=1;
	}
}
void pcomplemental(int map[])
{
	int i=TTWO;
	while(i>0)
	{
		printf("%d",map[i-1]); 
		i--;
	}
}
int excess(int map[])
{
	if(map[TONE]==1) map[31]=0;
	else map[TONE]=1;	
}
void pexcess(int map[])
{
	int i=TTWO;
	while(i>0)
	{
		printf("%d",map[i-1]); 
		i--;
	}
}
/*void ITEID(int map[]) 
{	int i=TTWO;int j[TTWO]={0};int e[8]={0};int c=22;
	while(i)
	{
		if(map[i--]==1) {break;i--;}	
	}
	integertrueform(i,e);
	j[23]=map[TONE];
	while(i&&c+1)
	{
		j[c--]=map[i--];
	}
	printf("ITEEE754浮点数:0");
	int y=31; 
	while(y>24)
	{
		printf("%d",e[y--]);
	}
	c=23; 
	while(c+1)
	{
		printf("%d",j[c--]);
	}
	printf("\n");
	
} 
/*void ITEI
void ITED */
main()
{	int a[TTWO]={0},z[TTWO]={0};
	int ti = 0;
    double td = 0;
    double tdf=0;
    int tdi=0;
    char str[10]="";
	printf("请输入一个十进制数:");
    scanf("%s",str);    // 先存成字符串 
    if (NULL == strchr(str, '.'))   // 等于NULL是没有找到小数点 
    {
        sscanf(str, "%d", &ti);  // 再从字符串格式化成整型
		printf("输入的是定点整型:%d\n", ti); 
  		integertrueform(ti,a);	
		printf("原码:");
		ptrueform(a);
	/*	ITEID(a);*/
		
		printf("\n");
		onescomplement(a);
		printf("反码:");
		ponescomplement(a);
		printf("\n");
		complemental(a);
		printf("补码:");
		pcomplemental(a);
		printf("\n");
		excess(a);
		printf("移码:");
		pexcess(a);
		printf("\n");
    }
    else
    {
        sscanf(str, "%lf", &td);  // 再从字符串格式化成浮点型 
        printf("输入的是浮点数:%lf\n", td); 
        if(td<1&&td>-1)
        { 
      		decimaltrueform(td,a);
			printf("定点小数原码:");
			ptrueform(a);
			printf("\n");
			onescomplement(a);
			printf("定点小数反码:");
			ponescomplement(a);
			printf("\n");
			complemental(a);
			printf("定点小数补码:");
			pcomplemental(a);
			printf("\n");
			excess(a);
			printf("定点小数移码:");
			pexcess(a);
			printf("\n");
        }
        if(td>=1||td<=-1)
		{
        	tdi=(int)td;
        	tdf=td-tdi;
        	integertrueform(tdi,a);	
        	decimaltrueform(tdf,z);
        	
			printf("原码整数部分:");
			ptrueform(a);
			printf("		");
			printf("原码小数部分:");
			ptrueform(z);
			printf("\n");
			
			onescomplement(a);
			printf("反码整数部分:");
			ponescomplement(a);
			printf("		");
			onescomplement(z);
			printf("反码小数部分:");
			ponescomplement(z);
			printf("\n");
			
			complemental(a);
			printf("补码整数部分:");
			pcomplemental(a);
			printf("		");
			complemental(z);
			printf("补码小数部分:");
			pcomplemental(z);
			printf("\n");
			
			excess(a);
			printf("移码整数部分:");
			pexcess(a);
			printf("		");
			excess(z);
			printf("移码小数部分:");
			pexcess(z);
			printf("\n");
        	
        } 
        
    }

}

你可能感兴趣的:(C语言机器数的表示)