📄 定点运算9.cpp
字号:
#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 + -