資源簡介
用C語言實現的二進制數一位乘運算,BOOTH算法的實現
代碼片段和文件信息
#include
#include
#include
int?main()
{
????int?ijk;
????int?cha;
????int?jw=0;//進位標記符號
????int?cd;//字符串長度
????int?biaoji;
????char?bcs[21]={0}cs[21]={0}jg[41]={0};//賦值為0
????char?*bufenji[41]={0};
????printf(“請輸入:“);
????scanf(“%s?%s“bcscs);
????for(i=0;i ????{
????????jg[i]=bcs[i];
????}
????//將小數點全部變成數字??即有兩位符號位
????if(bcs[0]==‘+‘)bcs[2]=‘0‘;//將bcs中的原碼變補碼?jg記錄-x的補碼
????if(bcs[0]==‘-‘)//負數情況
????{
????????bcs[1]=bcs[2]=‘1‘;//符號位為11
????????for(i=strlen(bcs)-1;i>2;i--)//從尾部開始
????????{
????????????if(bcs[i]==‘1‘)
????????????{
????????????????for(i=i-1;i>2;i--)
????????????????{
????????????????????if(bcs[i]==‘0‘)
????????????????????????bcs[i]=‘1‘;//取反
????????????????????else
????????????????????????bcs[i]=‘0‘;
????????????????}
????????????????break;
????????????}
????????}
????}
????if(jg[0]==‘-‘)
????????jg[2]=‘0‘;//-x的補碼
????if(jg[0]==‘+‘)
????{
????????jg[1]=jg[2]=‘1‘;
????????for(i=strlen(jg)-1;i>2;i--)
????????{
????????????if(jg[i]==‘1‘)
????????????{
????????????????for(i=i-1;i>2;i--)//取反操作
????????????????{
????????????????????if(jg[i]==‘0‘)
????????????????????????jg[i]=‘1‘;
????????????????????else
????????????????????????jg[i]=‘0‘;
????????????????}
????????????????break;
????????????}
????????}
????}
????cs[strlen(cs)]=‘0‘;//將b中的原碼變補碼?尾部填0?即為y(n+1)
????if(cs[0]==‘+‘)//正值補碼數值部分不變
????????cs[2]=‘0‘;
????if(cs[0]==‘-‘)//負值操作
????{
????????cs[1]=cs[2]=‘1‘;//符號位改為1?1
????????for(i=strlen(cs)-1;i>2;i--)
????????{
????????????if(cs[i]==‘1‘)
????????????{
????????????????for(i=i-1;i>2;i--)//取反操作
????????????????{
????????????????????if(cs[i]==‘0‘)
????????????????????????cs[i]=‘1‘;
????????????????????else
????????????????????????cs[i]=‘0‘;
????????????????}
????????????????break;
????????????}
????????}
????}
????bufen=(char*)malloc(strlen(bcs));//開辟新空間
????for(i=0;i ????????bufen[i]=‘0‘;
????for(i=strlen(cs)-1;i>2;i--)
????{
????????cha=cs[strlen(cs)-1]-cs[strlen(cs)-2];//?y(n+1)-y(n)
????????if(cha==1)//部分積加【x】補碼??右移一位
????????{
????????????for(j=strlen(bcs)-1;j>0;j--)
????????????{
????????????????if(bcs[j]-‘0‘+bufen[j]-‘0‘+jw==3)//1+1?進位為1
????????????????{
????????????????????bufen[j]=‘1‘;
????????????????????jw=1;
????????????????}
????????????????else?if(bcs[j]-‘0‘+bufen[j]-‘0‘+jw==2)//1+0進位為1?或者?0+1進位為1?或者?1+1?進位為0
????????????????{
??????
評論
共有 條評論