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中的小错误?