Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++] operatore ^=

  1. #1

    [c++] operatore ^=

    purtroppo sono alle prime armi e non ho un buon libro di c++ sotto mano, qualcuno mi potrebbe spiegare cosa fa di preciso l'operatore ^=?
    in particolare vorrei sapere perche'
    a=5
    b=11
    b^=a^=b^=a;
    mi setta a=11 e b=5. Mi viene da supporre che scambi le due variabili?
    Grazie mille
    Walk fast, chew slowly.
    "We used students as subjects because rats are expensive and you get too attached to them"

  2. #2
    E' l'OR esclusivo bit a bit, non so se cambiando i valori di a e b continui a funzionare...

    In pratica hai:

    codice:
    a=5
    b=11
    b^=a^=b^=a;
    ossia:

    codice:
    a=5
    b=11
    b^=a; // => b = 11 XOR  5 = %1011 ^ %0101 = %1110 = 14
    a^=b; // => a = 5  XOR 14 = %0101 ^ %1110 = %1011 = 11
    b^=a; // => b = 14 XOR 11 = %1110 ^ %1011 = %0101 =  5
    Proviamo ora con una scelta "bastarda" di a e b:

    codice:
    a=11
    b=11
    b^=a; // => b = 11 XOR 11 = %1011 ^ %1011 = %0000 =  0
    a^=b; // => a = 5  XOR  0 = %1011 ^ %0000 = %1011 = 11
    b^=a; // => b = 0  XOR  5 = %0000 ^ %1011 = %1011 = 11
    Parrebbe funzionare...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Scusa, ho sbagliato l'ultimo caso.

    codice:
    a=11
    b=11
    b^=a; // => b = 11 XOR 11 = %1011 ^ %1011 = %0000 =  0
    a^=b; // => a = 11 XOR  0 = %1011 ^ %0000 = %1011 = 11
    b^=a; // => b = 0  XOR 11 = %0000 ^ %1011 = %1011 = 11
    Cmq e' una pratica di programmazione basata sugli effetti collaterali dell'operatore ^=, quindi da evitare.
    Infatti in Java non va...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4
    ho capito, grazie! c'e' un altro modo per scambiare due variabile senza dover ricorrere ad una terza?
    Walk fast, chew slowly.
    "We used students as subjects because rats are expensive and you get too attached to them"

  5. #5
    Puoi farlo in assembly: carichi i due valori in due registri del processore, e poi li riscarichi nelle due variabili scambiandoli.
    Ci si aspetta cmq, che un compilatore decente debba fare il lavoro per te...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Se devi scambiare variabili numeriche queste tre operazioni aritmetiche riescono a scambiare il valore delle variabili a e b:

    a = a - b
    b = a + b
    a = b - a

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

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.