C, XOR BIT A BIT

di il
5 risposte

C, XOR BIT A BIT

Ciao a tutti..dovrei realizzare un programma che mi calcola, dato un intero a 32 bit, lo XOR bit a bit dei primi due byte con gli ultimi due.
Quello che non capisco è come faccio, dato un numero, ad accedere, tramite il c, alla sua "versione" binaria.

Non so se mi sono spiegato bene, comunque faccio un esempio:

volevo sapere, se, dato il numero 10, come faccio a vederlo come 1010.


grazie a tutti!

5 Risposte

  • Re: C, XOR BIT A BIT

    int n=10;
    int xorn = (n>>16) ^ (n&0xFFFF);
    cosi fai uno XOR dei bit dei due byte.
    per visualizzare i bit:
    
    for(i=0; i <32; ++i)
    {
        if ( (n<<i) & 0x80000000)
            putchar('1');
        else 
            purchar('0');
    }
    
    
  • Re: C, XOR BIT A BIT

    Non c'è bisogno di vedere il numero in binario. E' l'operazione che viene effettuata bit a bit.

    Ti basta scrivere

    x = var1 ^ var2;
  • Re: C, XOR BIT A BIT

    Grazie dell'aiuto vbextreme....non ho compreso interamente il tuo codice perchè non ho ancora molta dimestichezza per quanto riguarda le operazioni con i bit e cose così...stasera o domani me lo studio per bene!


    Oregon, ma l'operazione, nel mio caso, devo eseguirla su byte di uno stesso numero, se non riesco a visualizzarli in binario non ho modo per passare gli argomenti giusti al ^, no?
  • Re: C, XOR BIT A BIT

    Devi identificare i byte del numero ma non ha senso dire che devi "visualizzarli in binario" per farlo.

    E' esattamente quello che ha fatto vbextreme, quando scrive

    n & 0xFFFF

    non fai altro che isolare i due byte meno significativi di n, e con

    n >> 16

    isoli i due byte più significativi, scorrendoli a destra di 16 bit in modo da potere operare con gli altri byte. In pratica, se il valore intero a 32 bit dentro n è fatto da 4 byte

    B3 B2 B1 B0

    con la prima parte di codice otterrai

    00 00 B1 B0

    e con la seconda parte

    00 00 B3 B2

    Alla fine farai l'operazione di xor (^) tra

    00 00 B1 B0
    00 00 B3 B2

    e il risultato sarà nella variabile chiamata xorn.

    Tuttavia nel codice di vbextreme c'è un piccolo bug. Lui non ha tenuto conto dell'effetto dell' "estensione del segno" e quindi ti consiglio di utilizzare questa riga così modificata

    int xorn = ((unsigned int)n>>16) ^ (n&0xFFFF);
  • Re: C, XOR BIT A BIT

    Grazie mille veramente ragazzi...spiegazione chiarissima, mi siete stati di grandissimo aiuto!!!!
Devi accedere o registrarti per scrivere nel forum
5 risposte