Finalmente sono spuntate soluzioni. Vedete se vi piace la mia (concettualmente simile a quella di pigreco00). Ho limitato a 4 bit, ma basta aumentare la costante. Per il controllo sull'inserimento basta un if e un return (o un break) nel while.
#include <stdio.h>
#define N_BITS 4
int main(int argc, char *argv[])
{
unsigned int n1;
unsigned int n2;
unsigned int ris=0;
unsigned int rip=0;
printf("n1 : ");
scanf("%u", &n1);
printf("n2 : ");
scanf("%u", &n2);
int cont=0;
while (1){
unsigned int bit1 = n1%10;
unsigned int bit2 = n2%10;
ris += bit1 ^ bit2 ^ rip;
rip = (bit1 & bit2) | (rip &(bit1|bit2)); //full adder
n1 /=10;
n2 /=10;
if (++cont < N_BITS){
ris*=10;
continue;
}
else break;
}
if(rip!=0)
printf("ERRORE\n");
else
for(int i =0; i < N_BITS; i++)
{
printf("%u", ris%10);
ris /=10;
}
return 0;
}