Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    1

    c++ Aiuto

    Ho fatto un programma che effettua la sottrazione fra numeri binari, però quest'ultimo non funziona correttamente. Cerco disperatamente aiuto.
    In attesa rigrazio anticipatamente.

    Alberto

    Allego il codice:
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    #define M 20

    void main()
    {
    clrscr();
    char n1[M],n2[M];
    int n3[M];
    for(int i=0;i<M;i++)
    n3[i]=0;
    cin>>n1;
    cin>>n2;
    for(i=0;n1[i]!='\0';i++);
    for(int y=0;n2[y]!='\0';y++);
    int prestito=0;
    int p=i;
    int p2=y;
    for(;p<=M;p++)
    n1[p]='0';
    for(;p2<=M;p2++)
    n2[p2]='0';
    int k;
    for(k=0,i=0,y=0;k<M;i++,y++,k++)
    {
    if (prestito==0)
    {
    if (n1[i]=='0'&&n2[y]=='0') n3[k]=0;
    if (n1[i]=='0'&&n2[y]=='1')
    {
    n3[k]=1;
    prestito=1;
    }
    if (n1[i]=='1'&&n2[y]=='0') n3[k]=1;
    if (n1[i]=='1'&&n2[y]=='1') n3[k]=0;

    }
    else
    {
    if (n1[i]=='0'&&n2[y]=='0')
    {
    n3[k]=1;
    prestito=1;
    }
    if (n1[i]=='1'&&n2[y]=='0')
    {
    n3[k]=0;
    prestito=0;
    }
    if (n1[i]=='0'&&n2[y]=='1')
    {
    n3[k]=0;
    prestito=1;
    }
    if (n1[i]=='1'&&n2[y]=='1')
    {
    n3[k]=1;
    prestito=1;
    }
    }
    }
    for(p=0;p<M;p++)
    cout<<n3[p];
    getch();
    }

  2. #2
    i calcolatori lavorano così:
    a - b = a + (-b)
    per cui a - b non è altro che a + inverso di b in complemento a 2.

    Una volta complementato b la somma puoi farla bit per bit usando le seguenti espressioni booleane.

    INGRESSO
    A = bit in input
    B = bit in input
    C = resto dell'operazione precedente

    USCITA
    Out ::= A ^ B ^ C
    Resto ::= A & B | A & C | B & C

    se alla fine del processo Resto è diverso da zero significa che hai avuto un overflow

    il complemento a due puoi ottenerlo applicando bit a bit la funzione NOT al secondo operando della sottrazione e poi sommando la costante 1 al risultato.

    Quindi, riepilogo ad alto livello algoritmo per a - b:

    applica not bit a bit su b
    esegui la somma bit a bit di b + 1
    esegui la somma bit a bit di a + b

    Infine ti segnalo che per eseguire operazioni più rapidamente usando l'hardware conviene convertire i due numeri in int e usare poi il classico operatore -

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 © 2025 vBulletin Solutions, Inc. All rights reserved.