tl; dr он использует ASCII-арифметику для перевода символов в числа для использования в двоичной арифметике.
Двоичное добавление - это добавление двух двоичных чисел - этот код использует то, как C ++ приводит char
кint
, чтобы облегчить это. Код ASCII для числа - это то, как он представляется за кадром;например, '0'
соответствует 48, а '1'
соответствует 49. Функция C ++ '1' - '0'
фактически возвращает 49 - 48
;вычитает значения кода ascii. Вот почему, например, 'a' - '0'
return 49
: код для 'a'
равен 97, а 97 - 48 = 49.
a[i] - '0'
является его расширением, взятие рассматриваемого символа и «вычитание» из него значения ASCII '0'
. Если символ в a[i]
является '0'
, это 48 - 48;если это '1'
, это 49 - 48. Результат - цифра 0 или 1, соответственно, которые могут использоваться для двоичной арифметики.
Используя вышеупомянутую логику, код начинается с правой стороны двух входных строк и анализирует символы по одной букве за раз, используя эти свойства, чтобы определить, является ли текущая буква '0'
или '1'
, а затем поместить результат в c
. (Если вы делаете это самостоятельно, вы можете также привести символ к int, как и (int)a[i--]
, если хотите, но это не удастся, если вы дадите ему неправильный ввод.)
Переменная int c
получает 1, если текущая цифра в первой строке равна '1'
, и 0, если это '0'
. Если оба символа '1'
с, то c
становится 2;это означает, что нам нужно «нести» бит. Перенос облегчается с помощью c /= 2;
: поскольку int
s не округляются, когда они разделены, если c
равно 0 или 1, в следующей итерации оно будет равно 0, тогда как если оно равно 2, оно будет равнона следующей итерации будет 1.
c % s + '0'
преобразует число обратно в char
для добавления в строку. Он принимает код ASCII для '0'
(48) и либо добавляет к нему 0, если c
равен 0 или 2 (оставляя его как 48, или '0'
), либо добавляет 1 к нему, если c
равен 1 (изменяетсяэто до 49, или '1'
). В качестве интересного примечания: если вы добавите достаточно к '0'
, оно в конечном итоге перейдет к буквам, а затем к символам и некоторым другим непечатным символам ASCII.
Как только вы получите логику ASCII и будете готовы заняться бинарной логикой, этот сайт включает в себя видео с объяснением кода . Удачи!