Учитывая, что два набора битов предоставляются в виде строк, char a[]
и char b[]
, как в коде ниже. И задается задача добавления этих битов. Я беру его и написал следующее, чтобы суммировать два бита:Добавление битов, проще
#include <stdio.h>
#include <string.h>
int carry = 0;
char result(char r, int c) {
char R = '0';
if (carry) {
if (c) {
R = '0';
carry = 1;
} else {
R = r == '0' ? '1' : '0';
carry = R == '0' ? 1 : 0;
}
} else {
if (c) {
R = '0';
carry = 1;
} else {
R = r;
carry = 0;
}
}
return R;
}
char sum(int x, int y) {
char r = '0';
if (x^y)
r = result('1', 0);
else if (x & y)
r = result('0', 1);
else
r = result('0', 0);
return r;
}
int main() {
char a[] = "01";
char b[] = "01";
char c[] = "00";
for (int i = strlen(c)-1; i > -1; i--)
c[i] = sum(a[i] == '0' ? 0 : 1, b[i] == '0' ? 0 : 1);
printf("%s\n", c);
}
Возможно ли это сделать проще?
Я думаю, что ваш вопрос лучше подходит для codereview http://codereview.stackexchange.com/ –
Гора из мухи. Код кажется запутанным. Было бы ясно добавить две цифры (источники и результат, скорректированные для символьного значения) и передать «перенос» на следующую цифру влево. Затем он будет работать на столько цифр, сколько вы можете пожелать (но, очевидно, но не огромен). что может быть сделано в одном маленьком цикле. –
Вы исходите из фона VHDL/Verilog случайно? –