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

Discussione: [C] Complemento a 2

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    22

    [C] Complemento a 2

    Ciao a tutti!
    Ho un problema: ho un vettore di bytes [che ho (ovviamente) definito char].

    Vorrei sommare tutti gli elementi del vettore e calcolare il complemento a 2 della somma ottenuta.
    Poi vorrei confrontare gli ultimi 8 bits del complemento a 2 con i bits dell'ultimo byte del vettore (che avevo incluso nella somma).

    Avete idea di come possa fare?

    Grazie mille!

    Chiara

  2. #2
    Il problema in generale mi sembra molto semplice, basta un for e poco altro. Per il resto, il complemento a due si ottiene effettuando il complemento a uno (con l'operatore ~) e aggiungendo 1.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Per la terza parte.. che significa che vuoi confrontare?
    Vedere bit a bit se nono uguali ? che ti serve?
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  4. #4
    in accordo con bigmickey il problema non e molto chiaro,

    forse intendevi una cosa di questo genere ?


    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 5

    int main()

    {
      
    int pippo;
    unsigned char pr[SIZE]={'a','b','c','d','e'},sum=0x00,confronto;


    for(
    pippo=0;pippo<SIZE;pippo++)  // Somma
     
    sum=sum|pr[pippo];
     
     
    sum=(~sum)|0x01;  // Complemento a due (se mi ricordo bene!)
     
     
    confronto=sum&(pr[SIZE]); // Confronto della somma con l ultima casella del vettore

    system("pause");
      



  5. #5
    Originariamente inviato da MItaly
    complemento a due si ottiene effettuando il complemento a uno (con l'operatore ~) e aggiungendo 1.
    sum=(~sum)+1;
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    22
    Grazie per le risposte. Io non sono molto brava in C quindi per me il poco altro che dici tu è tanto.

    Quello che so fare è calcolare la somma, ovvio:

    unsigned char vettore[N];
    unsigned long somma; // definisco somma come long perchè non so quanti byte sono necessari a descriverlo. Sbaglio?

    int i;
    somma=vettore[0];
    for(i=1;i<N;i++) somma=somma+vettore[i];

    Poi voglio calcolare il complemento a 2 di somma. Che faccio?

    E poi come faccio ad isolare gli ultimi 8 bit di somma e vedere bit a bit se coincide con vettore[N-1] ???

    Chiara

  7. #7
    Originariamente inviato da bigmickey
    sum=(~sum)+1;
    Urgh, in teoria non dovrebbe essere la stessa cosa che fare l' OR con 00000001? Almeno cosi mi ricordavo dal corso di fondamenti di info (quanto tempo...lol)


  8. #8
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    22
    Ok, grazie, ho visto tardi le risposte.

    Si, intendevo quello che avete scritto voi.

    Grazie mille per l'aiuto.

    Chiara

    P.S. rimane l'ultimo quesito: come isolo gli ultimi 8 bit di somma?
    P.P.S. io non so a priori quanti bytes sono necessari per somma. Come faccio a definirlo? forse char non basta perchè è solo 1 byte

  9. #9
    Originariamente inviato da kali82
    E poi come faccio ad isolare gli ultimi 8 bit di somma e vedere bit a bit se coincide con vettore[N-1] ???
    codice:
    if ((vettore[N-1] & somma) == vettore[N-1])
       //i bit coincidono
    P.P.S. io non so a priori quanti bytes sono necessari per somma. Come faccio a definirlo? forse char non basta perchè è solo 1 byte
    Ma somma l'abbiamo definito (nel post prima) come unsigned long, per cui come dimensioni dovrebbe bastare...
    Urgh, in teoria non dovrebbe essere la stessa cosa che fare l' OR con 00000001?
    Non mi pare... :master:
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Non mi pare... :master:
    giusto hai ragione, mi sono confuso io tra somma e confronto



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.