c++ - 显示二进制加法后的最后一位

标签 c++ binary

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

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

Shows the output, the last digit is missing.

最佳答案

我建议你看看the full Adder algorithm 。这展示了如何对二进制数求和并计算进位。

此外,如果您始终使用大于 0 的数字,我建议您使用 unsigned char

现在,这是一个示例,说明 sum 在完整的加法器工作之后应如何工作:

for(i = 0; i < 8 ; i++){
   C[i] = ((A[i] ^ B[i]) ^ carry); 
   carry = ((A[i] & B[i]) | (A[i] & carry)) | (B[i] & carry); 
}

关于c++ - 显示二进制加法后的最后一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978733/

相关文章:

c++ - 缺少功能描述(IDE)

c++ - 从圆弧边绘制曲线

binary - 二进制代码如何准确地转换为字母?

c - 使用 0b 表示打印 (printf) float

c++ - 使用为不同机器编译的静态库

c++ - 在 LLVM 和 gcc 中运行时的不同结果

C++ delete[] void* 好奇心

Javascript将字符串转换为固定长度的二进制

mysql - 如何将 LIKE 运算符与二进制有序时间 UUID 结合使用

Python:由 1 和 0 组成的字符串 -> 二进制文件