Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107

    [C] somma algebrica

    ho scritto questa funzione per la somma algebrica di due interi, ma funziona solo fin quando sono entrambi positivi, come posso fare in modo che funzioni anche con numeri negativi???

    codice:
    
    
    int add(int op1,int op2)
    
    {
       int sum, carry=1;
    
    
       while(carry>0)
       {
          /*vedi tavole verità*/
    
          sum=op1^op2;//uno xor fra i due operatori restituisce la somma senza riporto
          carry=(op1)&(op2);//il riporto si ottiene con un and
          carry=carry<<1;//il quale viene shiftato fino a diventare 0
          op1=sum;
          op2=carry;
       }
    
       return op1;
    }
    Grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    41
    Sinceramente non riesco a capire come uno XOR tra i due operandi possa sostituire un'addizione...

    Stefano.

    P.S.: chiedo venia, non avevo visto il loop.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    restituisce una somma parziale, senza l'applicazione dei riporti
    che vengono aggiunti con la and ad il risultato dello xor .

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Per ottenere il resto basta fare l' and tra i due numeri e shiftarlo a sinistra di uno (carry).
    Per ottenere invece la somma senza resto basta fare lo xor tra i due numeri (sum).
    Ora basta sommare la somma senza resti al carry.
    Il problema è che anche quest' ultima somma potrebbe avere resti, per cui:
    -Se ci sono resti si chiama ricorsivamente la add;
    -Se non ci sono resti si ritorna sum|carry.

    codice:
    int add(int op1,int op2)
    {
        int carry=((op1&op2)<<1);
        int sum=(op1^op2);
        if(!(sum&carry))
            return sum|carry;
        else
            return add(sum,carry);
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C] somma algebrica

    Originariamente inviato da darksergio
    come posso fare in modo che funzioni anche con numeri negativi???
    Utilizza il "complemento a 2" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.