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

📄 定点运算9.cpp

📁 实现二进制定点运算: 1.定点整数补码加法 2.定点整数补码减法 3.定点小数Booth补码一位乘法 4.定点小数原码一位除法(加减交替法) 5.定点小数补码一位除法(加减交替法)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<fstream.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
const int mmm=32;
const int maximum=31;
const int line=50;
int product[maximum*2];
int*  original_mul_one(int * faciend,int fb,int* ier,int rb);
int * original_mul_two(int * faciend,int fb,int* ier,int rb);
int * booth_one(int * faciend,int fb,int* ier,int rb);
int * original_div(int * dividend,int vb,int *divisor,int sb);
int * cplmt_div(int * dividend,int vb,int * divisor,int sb);
void result1(long a,long b)
{	int bita[mmm],bitb[mmm],bits[mmm],flaga=0,flagb=0;
	int max;
	int ab=0;
	int result;
	int i;
	for(i=0;i<mmm;i++){
		a>0?bita[i]=0:bita[i]=1;
		b>0?bitb[i]=0:bitb[i]=1;
		
	}
	if(a<0){
		flaga=1;
	a=-a;
	}
    if(b<0){
		flagb=1;
	b=-b;
	}

     i=1;
	bita[0]=0;
	while(a>0){
		bita[0]++;
		bita[i]=a%10;
		a=a/10;
		i++;
	}
	a=0;
    int ai;
	for(i=bita[0];i>0;i--){
	ai=i-1;
		a=a+bita[i]*pow(2,ai);
	}
	
	if(flaga==1)a=-a;
//	cout<<"&&"<<a<<"&&";

	 i=1;
	bitb[0]=0;
	while(b>0){
		bitb[0]++;
		bitb[i]=b%10;
		b=b/10;
		i++;
	}
	b=0;
	int bi;
	for(i=bitb[0];i>0;i--){
		bi=i-1;
		b=b+bitb[i]*pow(2,bi);
	}
	
	if(flagb==1)b=-b;
//	cout<<"&&"<<b<<"&&";
	result=a*b;
	if(result<0){ab=1;
	result=-result;
	}
	i=1;
	bits[0]=0;
	while(result>0)
	{
		bits[i]=result%2;
		result=result/2;
		i++;
		bits[0]++;
	}
	cout<<"\n         定点整数乘法运算\n";
	cout<<"\n         被乘数[x]=";
	if(flaga==1)cout<<"-";
	for(i=bita[0];i>0;i--)cout<<bita[i];
	cout<<"\n          乘数[y]=";
	if(flagb==1)cout<<"-";
	for(i=bitb[0];i>0;i--)cout<<bitb[i];
	cout<<endl;
    if(flaga==1)cout<<"-";
	for(i=bita[0];i>0;i--)cout<<bita[i];
	cout<<"\n*";
    if(flagb==1)cout<<" -";
	for(i=bitb[0];i>0;i--)cout<<bitb[i];
	cout<<"\n——————\n";
    if(ab==1)cout<<"-";
	for(i=bits[0];i>0;i--)cout<<bits[i];
		cout<<"         结果是:";
	if(ab==1)cout<<"-";
	for(i=bits[0];i>0;i--)cout<<bits[i];
	cout<<endl;
}

void result3(long a,long b)
{	int bita[mmm],bitb[mmm],bits[mmm],flaga=0,flagb=0;
	int max;
	int ab=0;
	int result;
	int i;
	for(i=0;i<mmm;i++){
		a>0?bita[i]=0:bita[i]=1;
		b>0?bitb[i]=0:bitb[i]=1;
		
	}
	if(a<0){
		flaga=1;
	a=-a;
	}
    if(b<0){
		flagb=1;
	b=-b;
	}

     i=1;
	bita[0]=0;
	while(a>0){
		bita[0]++;
		bita[i]=a%10;
		a=a/10;
		i++;
	}
	a=0;
    int ai;
	for(i=bita[0];i>0;i--){
	ai=i-1;
		a=a+bita[i]*pow(2,ai);
	}
	
	if(flaga==1)a=-a;
//	cout<<"&&"<<a<<"&&";

	 i=1;
	bitb[0]=0;
	while(b>0){
		bitb[0]++;
		bitb[i]=b%10;
		b=b/10;
		i++;
	}
	b=0;
	int bi;
	for(i=bitb[0];i>0;i--){
		bi=i-1;
		b=b+bitb[i]*pow(2,bi);
	}
	
	if(flagb==1)b=-b;
//	cout<<"&&"<<b<<"&&";
	result=a/b;
	if(result<0){ab=1;
	result=-result;
	}
	i=1;
	bits[0]=0;
	while(result>0)
	{
		bits[i]=result%2;
		result=result/2;
		i++;
		bits[0]++;
	}
	cout<<"\n         定点整数除法运算\n";
	cout<<"\n         被除数[x]=";
	if(flaga==1)cout<<"-";
	for(i=bita[0];i>0;i--)cout<<bita[i];
	cout<<"\n          除数[y]=";
	if(flagb==1)cout<<"-";
	for(i=bitb[0];i>0;i--)cout<<bitb[i];
	cout<<endl;
    if(flaga==1)cout<<"   -";
	for(i=bita[0];i>0;i--)cout<<bita[i];
	cout<<"\n除以";
    if(flagb==1)cout<<"-";
	for(i=bitb[0];i>0;i--)cout<<bitb[i];
	cout<<"\n——————\n";
    if(ab==1)cout<<"-";
	for(i=bits[0];i>0;i--)cout<<bits[i];
		cout<<"         结果是:";
	if(ab==1)cout<<"-";
	for(i=bits[0];i>0;i--)cout<<bits[i];
	cout<<endl;
}


void result(int a,int b)
{
	int bita[mmm],bitb[mmm],bits[mmm],flaga=0,flagb=0;
	int max;
	int ab=1;
	
	int i;
	for(i=0;i<mmm;i++){
		a>0?bita[i]=0:bita[i]=1;
		b>0?bitb[i]=0:bitb[i]=1;
		
	}
	if(a<0){
		flaga=1;
	a=-a;
	}
    if(b<0){
		flagb=1;
	b=-b;
	}

     i=1;
	bita[0]=0;
	while(a>0){
		bita[0]++;
		bita[i]=a%10;
		a=a/10;
		i++;
	}
	a=0;
    int ai;
	for(i=bita[0];i>0;i--){
	ai=i-1;
		a=a+bita[i]*pow(2,ai);
	}
	
	if(flaga==1)a=-a;
//	cout<<"&&"<<a<<"&&";

	 i=1;
	bitb[0]=0;
	while(b>0){
		bitb[0]++;
		bitb[i]=b%10;
		b=b/10;
		i++;
	}
	b=0;
	int bi;
	for(i=bitb[0];i>0;i--){
		bi=i-1;
		b=b+bitb[i]*pow(2,bi);
	}
	
	if(flagb==1)b=-b;
//	cout<<"&&"<<b<<"&&";
	bita[0]>bitb[0]?max=bita[0]:max=bitb[0];
	int sum=a+b;
	cout<<"&&"<<sum<<"&&";
	if(a<0)a=a+pow(2,bita[0]);
	
	i=1;
	while(a>0){
		bita[0]--;
		bita[i]=a%2;
		a=a/2;
		i++;
	}
	if(flaga==1){
		while(bita[0]>0){
		 bita[i]=0;
		bita[0]--;
		i++;
	}
	}
	if(b<0)b=b+pow(2,bitb[0]);
	i=1;
	while(b>0){
		bitb[0]--;
		bitb[i]=b%2;
		b=b/2;
		i++;
	}
	
if(flagb==1)
{
	while(bitb[0]>0){
  bitb[i]=0;
		bitb[0]--;
		i++;
	}
}int flags=0;
	if(sum<0){
		for(i=0;i<10;i++)
			bits[i]=1;
		 flags=1;
		sum=sum+pow(2,max);
	}
	else for(i=0;i<10;i++)
			bits[i]=0;
	if(sum<0){
		cout<<"/noverflow!/n";
		return;
	}
	
	
	i=1;
	int m=max;
	while(sum>0)
	{
	    m--;
		bits[i]=sum%2;
		sum=sum/2;
		i++;
	}
if(flags==1)
{
	while(m>0)
{
	 bits[i]=0;
	m--;
	i++;
}
}
	cout<<"补码加法:\n";
	cout<<"[x]补=:";
    	for(i=max+1;i>0;i--)cout<<bita[i];
	
	cout<<"\n[y]补=:";
	for(i=max+1;i>0;i--)cout<<bitb[i];
    
	cout<<"\n ";
    for(i=max+1;i>0;i--)cout<<bita[i];
	cout<<"\n+";
	for(i=max+1;i>0;i--)cout<<bitb[i];
	cout<<"\n——————\n";
	for(i=max+1;i>0;i--)cout<<bits[i];
	
	cout<<"\nresult is:";
    for(i=max+1;i>0;i--)cout<<bits[i];
}

void result2(int a,int b)
{
	int bita[mmm],bitb[mmm],bits[mmm],flaga=0,flagb=0;
	int max;
	int ab=1;
	
	int i;
	for(i=0;i<10;i++){
		a>0?bita[i]=0:bita[i]=1;
		b>0?bitb[i]=0:bitb[i]=1;
		
	}
	if(a<0){
		flaga=1;
	a=-a;
	}
    if(b<0){
		flagb=1;
	b=-b;
	}

     i=1;
	bita[0]=0;
	while(a>0){
		bita[0]++;
		bita[i]=a%10;
		a=a/10;
		i++;
	}
	a=0;
    int ai;
	for(i=bita[0];i>0;i--){
	ai=i-1;
		a=a+bita[i]*pow(2,ai);
	}
	
	if(flaga==1)a=-a;
//	cout<<"&&"<<a<<"&&";

	 i=1;
	bitb[0]=0;
	while(b>0){
		bitb[0]++;
		bitb[i]=b%10;
		b=b/10;
		i++;
	}
	b=0;
	int bi;
	for(i=bitb[0];i>0;i--){
		bi=i-1;
		b=b+bitb[i]*pow(2,bi);
	}
	
	if(flagb==1)b=-b;
//	cout<<"&&"<<b<<"&&";
	bita[0]>bitb[0]?max=bita[0]:max=bitb[0];
	int sum=a+b;
	cout<<"&&"<<sum<<"&&";
	if(a<0)a=a+pow(2,bita[0]);
	
	i=1;
	while(a>0){
		bita[0]--;
		bita[i]=a%2;
		a=a/2;
		i++;
	}
	if(flaga==1){
		while(bita[0]>0){
		 bita[i]=0;
		bita[0]--;
		i++;
	}
	}
	if(b<0)b=b+pow(2,bitb[0]);
	i=1;
	while(b>0){
		bitb[0]--;
		bitb[i]=b%2;
		b=b/2;
		i++;
	}
	
if(flagb==1)
{
	while(bitb[0]>0){
  bitb[i]=0;
		bitb[0]--;
		i++;
	}
}int flags=0;
	if(sum<0){
		for(i=0;i<10;i++)
			bits[i]=1;
		 flags=1;
		sum=sum+pow(2,max);
	}
	else for(i=0;i<10;i++)
			bits[i]=0;
	if(sum<0){
		cout<<"/noverflow!/n";
		return;
	}
	
	
	i=1;
	int m=max;
	while(sum>0)
	{
	    m--;
		bits[i]=sum%2;
		sum=sum/2;
		i++;
	}
if(flags==1)
{
	while(m>0)
{
	 bits[i]=0;
	m--;
	i++;
}
}
	cout<<"补码减法:\n";
	cout<<"[x]补=:";
    	for(i=max+1;i>0;i--)cout<<bita[i];
	
	cout<<"\n[-y]补=:";
	for(i=max+1;i>0;i--)cout<<bitb[i];
    
	cout<<"\n ";
    for(i=max+1;i>0;i--)cout<<bita[i];
	cout<<"\n+";
	for(i=max+1;i>0;i--)cout<<bitb[i];
	cout<<"\n——————\n";
	for(i=max+1;i>0;i--)cout<<bits[i];
	
	cout<<"\nresult is:";
    for(i=max+1;i>0;i--)cout<<bits[i];
}
void printline(int linelen){
	for(int i=0;i<linelen;i++)cout<<"_";
	cout<<endl;
}
void clear(){
	int i;
	for(i=0;i<maximum*2;i++)product[i]=0;
}
void display(int* p,int len,int format=0)
{
	int i;
	switch(format){
	case 1:
		if(len<1)return;
		cout<<p[0];
		cout<<'.';
		for( i=1;i<len;i++)cout<<p[i];
		break;
	case 2:
		if(len<2)return;
		cout<<p[0]<<p[1]<<'.';
		for(i=2;i<len;i++)cout<<p[i];
		break;
	case 3:
		if(len<3)return;
		cout<<p[0]<<p[1]<<p[2]<<".";
		for(i=3;i<len;i++)cout<<p[i];
		break;
	case 0:
		for(i=0;i<len;i++)cout<<p[i];

	}

}
void setoppr(int * a1,int l1,int* a2,int l2)
{
	int len=l1;if(len>l2)len=l2;
	for(int i=0;i<len;i++)a1[i]=a2[i];
}
void setoppr(int * a1,int l1,int num)
{
	for(int i=0;i<l1;i++)a1[i]=num;
}
void shr(int *p,int bit)
{
	for(int i=bit-1;i>0;i--)p[i]=p[i-1];
	p[0]=0;
}
void sar(int *p,int bit)
{
	for(int i=bit-1;i>0;i--)p[i]=p[i-1];
	p[0]=p[1];
}
void shl(int *p,int bit)
{
	for(int i=0;i<bit-1;i++)p[i]=p[i+1];
	p[bit-1]=0;
}
void setcplmt(int *a,int l)
{
	int c0,c1;
	//if(!sign){
	c0=1;
	for(int i=l-1;i>=0;i--){
		a[i]=1^a[i];
		c1=c0&a[i];
		a[i]=a[i]^c0;
		c0=c1;
	}
}

void tocplmt(int* p,int l)
{
	if(p[0]){
		setcplmt(p,l);
		p[0]=1;
	}

⌨️ 快捷键说明

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