Ciao, ho un problema in cui non so dove sbattere la testa. Ecco il testo:
"Si sviluppi un programma in linguaggio C che acquisisca in ingresso due numeri binari di 8
bit e li memorizzi in due vettori num1 e num2. Successivamente ne faccia la somma
algebrica interpretandoli come numeri rappresentati in complemento a due, ponendo il
risultato (rappresentato in complemento a due) in un vettore somma e segnalando all’utente
se c’è stato overflow."

Ecco il mio codice:
codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    /* vettori da utilizzare */
    int num1[8];
    int num2[8];
    int somma[8];
    /* creazione di due variabili: riporto e "nona posizione": "nona posizione" sarà il riporto dell'ultimo bit */
    int carry=0, nona_posizione=0;
    /* variabile ciclo */
    int i;
    /* acquisizione primo numero */
    printf("Inserire in formato binario, il primo numero: \n");
    for(i=0; i<8; i++)
    {
            printf("%d° numero da destra: ", (i+1));
            scanf("%d", &num1[i]);
    }
    printf("*** FINE ACQUISIZIONE PRIMO NUMERO ***\n");
    /* acquisizione secondo numero */
    printf("Inserire in formato binario, il secondo numero: \n");
    for(i=0; i<8; i++)
    {
            printf("%d° numero da destra: ", (i+1));
            scanf("%d", &num2[i]);
    }
    printf("*** FINE ACQUISIZIONE SECONDO NUMERO *** \n");
    /* esecuzione somma */
    for(i=0; i<=8; i++)
    {
      /* ora i vari controlli: se 0 e 0  e carry=0 => 0 e carry=0
                               se 0 e 1  e carry=0 => 1 e carry=0
                               se 1 e 0  e carry=0 => 1 e carry=0
                               se 1 e 1  e carry=0 => 0 e carry=1
                               ----
                               se 0 e 0  e carry=1 => 1 e carry=0
                               se 0 e 1  e carry=1 => 0 e carry=1
                               se 1 e 0  e carry=1 => 0 e carry=1
                               se 1 e 1  e carry=1 => 1 e carry=1
       quando i=7 e carry=1, porremo nona_posizione=1
       */
       if(i!=8)
       {
               /* 1 */
               if(((num1[i]==0) && (num2[i]==0)) && (carry==0))
               {
                   somma[i]=0;
                   carry=0;
                   /*printf("-> 0");*/
               }
               /* 2 */
               if(((num1[i]==0) && (num2[i]==1)) && (carry==0))
               {
                   somma[i]=1;
                   carry=0;
               }
               /* 3 */
               if(((num1[i]==1) && (num2[i]==0))&& (carry==0))
               {
                   somma[i]=1;
                   carry=0;
               }
               /* 4 */
               if(((num1[i]==1) && (num2[i]==1)) && (carry==0))
               {
                   somma[i]=0;
                   carry=1;
               }
               /* 5 */
               if(((num1[i]==0) && (num2[i]==0)) && (carry==1))
               {
                   somma[i]=1;
                   carry=0;
               }
               /* 6 */
               if(((num1[i]==0) && (num2[i]==1)) && (carry==1))
               {
                   somma[i]=0;
                   carry=1;
               }
               /* 7 */
               if(((num1[i]==1) && (num2[i]==0)) && (carry==1))
               {
                   somma[i]=0;
                   carry=1;
               }
               if(((num1[i]==1) && (num2[i]==1)) && (carry==1))
               {
                   somma[i]=1;
                   carry=1;
               }
       }
       else
       {
           if(carry == 1)
           { nona_posizione=1; }
       }
    } /* fine ciclo */
    /* scrittura del risultato */
    printf("Il risultato è: ");
    for(i=7; i>=0; i--)
    {
            printf("%d", somma[i]);
    }
    printf("\nE' stato rilevato overflow? ");
    /* controllo per overflow */
    if(carry==nona_posizione)
    { printf("No \n"); }
    else { printf("Si \n"); }
  system("PAUSE");	
  return 0;
}
Provando inserendo come num1: 00000001 e num2:00000001 ottengo come risultato: 00000011

perché??? è un errore logico ma qualcosa mi sfugge!!! per me è in qualche ciclo for e non penso ad istruzioni logiche ma non sono proprio sicuro