• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-11
  • 语言: C/C++
  • 标签: booth  C  

资源简介

用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
                {
      

评论

共有 条评论