我试图理解全加器。我想通过位操作添加两个 0、1 的 int 数组。但我不明白如何从两个数组计算马车。根据维基百科,C 是从下一个不太重要的阶段引入的。但是我如何从两个 int 数组中得到它呢?
int c[sizeof(a)];
for(int i=0; i<sizeof(a); i++) {
c[i] = (a[i] & b[i])
}
这就是我所做的,但我不确定我是否做对了。
for(i = 0; i < 8 ; i++){
sum[i] = ((a[i] ^ b[i]) ^ c); // c is carry
c = ((a[i] & b[i]) | (a[i] & c)) | (b[i] & c);
}
我理解其余的,但答案没有显示如何获得 c... 有人可以帮助我吗?提前致谢。
添加
// sum = a xor b
// carriage_in = a and b
// carriage_out = a xor b xor carriage_in
// sum = a xor b xor carriage_out
for(int i=0; i<8; i++) {
int carriage = (a[i] & b[i]);
sum[i] = ((a[i] ^ b[i]) ^ carriage);
carriage = ((a[i] & b[i]) | (a[i] & carriage)) | (b[i] & carriage);
}
它是否正确?我感到很困惑。