2

我正在尝试添加两个二进制数字。输出很好,除了最后一位。如代码下方的图片所示,未显示最后一位。有人知道这里有什么问题吗?

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;
 }

显示输出,缺少最后一位。

4

2 回答 2

3

我建议您查看完整的 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); 
}
于 2013-11-14T13:52:18.693 回答
1

您不是在二进制运算中添加两位数。

而不是这个,你正在使用字符串。

如果您使用 int 作为您的值,则可以使用二元运算符。喜欢 ”&”

myVar & 1会给你最起码的。

于 2013-11-14T13:28:51.037 回答