Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C] Complemento a due

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C] Complemento a due

    Ciao a tutti devo fare un programma che faccia il complemento a due di un numero binario.
    Ho scritto questo codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    int b,i;
    main()
    {
          printf("Quanti bit vuoi utilizzare? : ");
          scanf("%d",&b);
          printf("Inserisci la cifra binaria di cui si vuole fare il complemento a 2\n");
          int vett[b];
          for(i=0;i<b;i++){
                           printf("Inserisci il valore %d della cifra binaria: ",i+1);
                           scanf("%d",&vett[i]);
                           if(vett[i]!=0&&vett[i]!=1){
                                                      printf("%c%c Il valore inserito non corrisponde ad una cifra binaria (0 - 1)%c%c\n",219,219,219,219);
                                                      printf("Inserisci il valore %d della cifra binaria: ",i+1);
                                                      scanf("%d",&vett[i]);
                                                      }
                           }
          for(i=0;i<b;i++){
                           if(vett[i]==1){
                                          vett[i]=0;
                                          }
                           else{
                                vett[i]=1;
                                }
                           printf("La cifra binaria inserita dopo aver fatto il complemento a 1 %c : %d\n",138,vett[i]);
                           }
      system("PAUSE");	
    }
    Arrivato a questo punto riesco solamente ad invertire gli 0 in 1 e viceversa ma non so come sommare 1 alla cifra ottenuta dopo il complemento a uno in modo da fare il complemento a 2...avete qualche suggerimento?? Grazie per l'aiuto.
    PS: Se non rispondo per un pò è perchè ho problemi alla connessione e spesso resta staccata anche per qualche ora.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Comincia dal bit più a destra e, con un ciclo, usa le regole dell'addizione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    E appunto come faccio a fargli utilizzare quelle regole dato che ad esempio 111+1= 1000????

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    riporto = 0
    1+1 + riporto = 0 e riporto =1

    e così via ... qual è il problema?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ti basta sommare uno, per cui, partendo con i=0, cioè dal bit meno significativo:

    -Se il bit i-esimo è zero lo metti uguale a uno e l' algoritmo termina;
    -Se il bit i-esimo è uno lo metti uguale a zero e ripeti l' algoritmo con i=i+1.

    Quindi se hai v1=[0,0,1,1,1] :

    i=0, v0=1 (il meno significativo è quello più a destra), lo metti uguale a zero e l' array è:
    [0,0,1,1,0]

    i=1 -> [0,0,1,0,0]
    i=2 -> [0,0,0,0,0]
    i=3 -> [0,1,0,0,0]

    Tieni però presente che non funziona così se devi sommare un numero diverso da 1, in tal caso, devi tenere traccia dei vari riporti se ti serve una funzione per fare la somma generica.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Ok grazie tante per gli aiuti

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Allora ho fatto come dice ramy89 e se ho capito come fare nel caso iin cui io scrivo una cifra binaria tipo 0011111 ma se io scrivo questa 01100001 come faccio a fargli fare la somma e ad avere il risultato 01100010??

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Adesso provo come ha detto oregon e vediamo se ci riesco...

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Il numero è 01100001, i=0:
    L' ultimo bit è 1 per cui lo metti a zero e ottieni 01100000, e ripeti l' algoritmo con i=1.
    Il bit i-esimo è zero per cui lo metti a 1 ->01100010

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Fin qui ci sono ma non riesco a capire come fare fermare il ciclo nel momento in cui finiscono i riporti...ad esempio se io faccio un ciclo così:
    codice:
    for(i=b-1;b>=0;b--){
                                 if(vett[i]==1)
                                 vett[i]=0;
                                 else
                                 vett[i]=1
                                 }
    In questo modo inverte tutti i valori e non solo quelli che vanno sommati...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.