tl;dr it's using ASCII arithmetic to translate characters into numbers for use in binary arithmetic.
Binary addition is the addition of two binary numbers - this code is taking advantage of how C++ casts char to int in order to facilitate this. The ASCII code for a number is how it's represented behind-the-scenes; for example, '0' corresponds to 48 and '1' corresponds to 49. The C++ function '1' - '0' is actually returning 49 - 48; it subtracts the ascii code values. That's why, for example 'a' - '0' return 49: the code for 'a' is 97, and 97 - 48 = 49.
a[i] - '0' is an extension of this, taking the character in question and "subtracting" the ASCII value of '0' from it. If the character in a[i] is a '0', this is 48 - 48; if it's a '1', it's 49 - 48. The result is a numeral 0 or 1, respectively, which can be used for the binary arithmetic.
Using the above logic, the code is starting at the right-hand side of the two input strings and parsing the characters one letter at a time, using these properties to determine if the current letter is a '0' or a '1', and then putting the result into c. (If you're doing this yourself, you can also cast the character to int as with (int)a[i--] if you want, but this will fail if you give it bad input.)
The int variable c is receiving a 1 if the current digit in the first string is a '1' and a 0 if it's a '0'. If both of the characters are '1's, then c becomes 2; this is means we need to "carry" the bit. The carry is facilitated by c /= 2;: since ints don't round when they're divided, if c is 0 or 1, it will be 0 in the next iteration, whereas if it's 2, it'll be 1 in the next iteration.
c % s + '0' is converting the number back into a char to be added to the string. It takes the ASCII code for '0' (48) and either adds 0 to it if c is 0 or 2 (leaving it as 48, or '0') or adds 1 to it if c is 1 (changing it to 49, or '1'). As an interesting note, if you add enough to '0', it'll eventually go into the letters, and then symbols, and some other unprintable ASCII characters.
Once you've got the ASCII logic and are ready to tackle the binary logic, this site includes a video explaining the code. Good luck!
Adding two binary stringsdoesn't give overview of what you're asking for