Hola lord_byte: Bueno opino que seria mejor que sumes y restes en base decimal y luego muestres el resultado en base binaria, por simples cambios de base. Ej:
1100011 - 10110 = 1001101
99 - 22 = 77
Binario a Decimal:
decimal:= 0;
for i:= 0 to length(binario) - 1 do
if binario[ i +1 ] = 1 then decimal:= (1 shl i) + decimal;
donde binario es un string que representa el n° binario que ingresa el usuario y decimal es de tipo integer.
Decimal a Binario (para mostrar el resultado):
for i:= 0 to (sizeof(integer) * 8) - 2 do
if (decimal and (1 shl i)) <> 0 then binario[i + 1]:= '1'
else binario[i + 1]:= '0' ;
Hay que tener en cuenta si decimal es negativo, bueno en ese caso tenes que verificar el ultimo bit del byte alto del integer, si esta activado es negativo, caso contrario es un numero positivo; es por eso que al limite superior del for se le resta 2. Espero que te sea de utilidad, de todas maneras fijate bien porque seguramente hay muchas formas de hacerlo. Adios y Suerte!!!!.