Не могли бы вы мне подсказать код сложения двух двуичных чисел, но без перевода их в десятичную систему ?
a ^ b ^ carry, где carry - флаг переноса с предыдущей итерацииКод:
string sum(const string s1, const string s2) {
int len1 = s1.size();
int len2 = s2.size();
// Выровняем длины строк
string ls1 = len1<len2 ? s1 : s2;
string ls2 = len1<len2 ? s2 : s1;
for (int i = ls1.size(); i < ls2.size(); ++i) ls1 = '0'+ls1;
string result;
int carry = 0;
for (int i = ls2.size() - 1; i >= 0; --i) {
int bit1 = ls1.at(i) - '0'; // '0' => 0, '1' => 1
int bit2 = ls2.at(i) - '0';
char sum = (bit1 ^ bit2 ^ carry) + '0';
result = sum + result;
carry = (bit1&carry)|(bit2&carry)|(bit1&bit2);
}
if (carry) result = '1' + result;
return result;
}
int main() {
cout << sum("100111111", "1") << endl; // 101000000
return 0;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости