C 代码中的一个小错误,用于在不使用 * 运算符的情况下将 2 位二进制数相乘

Posted

技术标签:

【中文标题】C 代码中的一个小错误,用于在不使用 * 运算符的情况下将 2 位二进制数相乘【英文标题】:A minor Bug in C code for Multiplying 2bit binary numbers without using * operator 【发布时间】:2014-03-18 18:41:38 【问题描述】:

真的需要帮助,因为这个错误很小,而且几乎没有 6-7 行代码。我附上了 .cpp 文件链接,该链接很好地解释了代码中的错误发生1 [点击她获取代码].. 请帮忙,因为我坚持这个大约一个小时或更长时间.. 明天需要提交这个 iN 大学!

/*Multiplication Of 2-Bit Binary Numbers Without Using Multiplication Operator*/

/*
    1   1
    1   1
    -----
    1   1
1   1   0
---------
(By Full Adder)
1   0   0   1

*/

#include<stdio.h>
#include<conio.h>

void main()


    int k=0,a[4],b[4],i,x,y,temp=0,temp1=0,temp2=0,ans[2],j=1,c=0,sum=0;

    clrscr();

    printf("Enter The 2-Bit Binary Number(1):\t");
    scanf("%d",&x);

    printf("Enter The 2-Bit Binary Number(2):\t");
    scanf("%d",&y);


    for(i=10;i<=100;i=i*10)
    
     temp=y%i;
     temp=temp/(i/10);

     if(temp==1)
        
         ans[j]=x;
        

     else
        
        ans[j]=0;
        

     j++;

    


    ans[2]=ans[2]*10;


    //Implementing Full Adder

    for(i=10;i<=10000;i=i*10)

        

         //if anyone in comment, correct output

         /* considering second commented and input for x and y as 11
            the output for //1 would be
            0
            1
            1
            0
            0
         */  


        //if both //1 //2 uncommented, wrong output
        /*  0
            1
            0
            1
            0
            0
            0
            0
            0
            0
        */ 


         // 1
         temp2=ans[2]%i;
         temp2=temp2/(i/10);
         printf("%d\n",temp2);

         // 2
         temp1=ans[1]%i;
         temp1=temp1/(i/10);
         printf("%d\n",temp1);


         sum=(temp1^temp2)^c;
         c=(temp1&temp2)|((temp1^temp2)&c);

         b[k]=sum;
         k++;
        


    for(i=0;i<4;i++)
    
     printf("%d",b[i]);
    


    getch();


【问题讨论】:

将您的代码粘贴到您的帖子中。 @EdS。添加到帖子中的代码 【参考方案1】:
void main()

应该是

int main()

main的返回类型是int。

编辑:

分析代码后,您似乎应该在最后一个循环中以自下而上的顺序执行 XOR。基本上,您正在反向打印答案。

所以:

for(i=0;i<4;i++)

应该是:

for(i=3;i>=0;i--)

【讨论】:

不..它起作用了..我明白为什么需要这些 chabchanges..但主要问题仍然存在..它有点奇怪..我的意思是两个代码块与彼此..仍然只有在另一个块被评论时才会给出正确的输出..如果可能,请提供帮助

以上是关于C 代码中的一个小错误,用于在不使用 * 运算符的情况下将 2 位二进制数相乘的主要内容,如果未能解决你的问题,请参考以下文章

算法设计中的小错误

fitnlm之后MATLAB R2017B LogLikelihood中的小错误?

Koch 的雪花实现中的小错误

存储加载后 extjs 4.0.7 中 Combobox 中的小错误

ORA-6502字符串缓冲区太小错误与执行立即语句

Oracle中的字符串缓冲区太小错误