Hola,
Por una parte si al final hay que hacer la suma de S +1 correspondiente al último acarreo, esa suma es más sencilla de lo que parece ese código.
Tenés dos casos:
1) Si S está terminando en 0, entonces se sustituye ese 0 por 1 y ya tenés la suma,
2) y si S tiene 1s a la derecha, entonces vas sustituyendo esos 1 por 0 (de derecha a izquierda) hasta que encuentres un 0, que lo sustituís por 1 y parás.
caso 1 caso 2
1 1 1 0 0 1 0 0 1 1 1
+ 1 + 1
--------- -------------
1 1 1 0 1 1 0 1 0 0 0
Por otra parte, sobre el desbordamiento, en el teórico dice que si los sumandos "tienen el mismo signo y el resultado es de signo opuesto, ha habido desbordamiento y el resultado es incorrecto." Entonces al final de todo, en el último if es eso lo único que tenés que controlar para ver el desbordamiento. No es necesario controlar si c~=0 en el último if, porque en teoría la suma +1 se va a detener antes.
Pruebenlo y me cuentan.Eduardo