Я пытаюсь добавить две двоичные цифры. Выход прекрасен, за исключением последнего бита. Последний бит не отображается, как показано на рисунке ниже кода. Кто-нибудь знает, что здесь не так?Показать последний бит после двоичного добавления
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;
}
Я думаю, что ваш алгоритм пропускает возможность повторного переноса. Рассмотрим '001 + 011'. Есть две вещи, а не одна. – MSalters
Что такое 'sum' как? – patchwork
Хм. Предложенный код, похоже, работает, когда я запускаю его на ideone. http://ideone.com/PewJPt Хотя вход отличается от отображаемого здесь. – drescherjm