我正在尝试添加两个二进制数字。除最后一位外,输出正常。最后一位不会显示在代码下方的图片中。有人知道这里有什么问题吗?
int main(){
char C[9]={'\0','\0','\0','\0','\0','\0','\0','\0','\0'};
char B[9]={'0','1','0','0','0','0','0','1','\0'};
char A[9]={'0','1','0','0','0','0','0','0','\0'};
char sum[9]={'\0','\0','\0','\0','\0','\0','\0','\0','\0'};
char carry='0';
for(int i = 7; i >= 0; i--) {
C[i] = (A[i] ^ B[i]) ^ carry;
carry = A[i] & B[i];
}
cout << A << endl << B << endl << C << endl; //output shown below
//for wrap-around carry
for(int i = 7; carry!=0; i--) {
sum[i] = C[i] ^ carry;
carry = C[i] & carry;
}
return 0;
}
答案 0 :(得分:3)
我建议你看看the full Adder algorithm。这显示了如何对二进制数求和并计算进位。
此外,如果您总是使用大于0的数字,我建议您使用unsigned char
。
现在,这里是一个关于sum应该如何在完整的Adder工作之后工作的例子:
for(i = 0; i < 8 ; i++){
C[i] = ((A[i] ^ B[i]) ^ carry);
carry = ((A[i] & B[i]) | (A[i] & carry)) | (B[i] & carry);
}
答案 1 :(得分:1)
您没有在二进制操作中添加两位数字。
而不是这个,你正在使用字符串。
如果对值使用int,则可以使用二元运算符。喜欢“&amp;”
myVar & 1
会给你一点点。