f = f ^ g;
// f = 01; g = 10 (binario)
// então f = 01 ^ 10 = 11; portanto f = 3;
g = g ^ f;
// f agora é 3; f = 11
// g = 10;
// então g = 10 ^ 11 = 01; portanto g = 1;
Entendi agora que existe uma conversão da base decimal pra binária e o resultado volta pra base decimal. Porém, surgiu uma outra dúvida. Como se calcula:
f = 01 ^ 10 = 11; (Por que deu 11?)
g = 10 ^ 11 = 01; (Por que deu 01?)
Através de Álgebra de Boole.
Pode se basear nas tabelas verdade que eu postei antes.
Se ficou difícil entender com true e false, substitua o true por 1 e o false por 0:
Então, vamos separar os bits dos seus números.
O número 01 tem dois bits onde o bit a = 1 e o bit b = 0.
O número 10 tem dois bits onde o bit a = 0 e o bit b = 1.
Primeiro vamos calcular o bit a do resultado.
Então a conta será 1 ^ 0, onde 1 é o bit a do primeiro número e 1 é o bit a do segundo número.
Olhando a tabela verdade do XOR temos que 1 ^ 0 = 1, então o bit a do resultado será 1.
Agora vamos calcular o bit b do resultado.
Então a conta será 0 ^ 1, onde 0 é o bit b do primeiro número e 0 é o bit b do segundo número.
Olhando a tabela verdade do XOR temos que 0 ^ 1 = 1, então o bit b do resultado será 1.
Assim o resultado final de 01 ^ 10 é igual à 11.
Podemos fazer o cálculo conforme o quadro abaixo:
| b | a | bit
+---+---+
| 0 | 1 | primeiro número
^ +---+---+
| 1 | 0 | segundo número
= +---+---+
| 1 | 1 | resultado
Tente utilizar o quadro acima e a tabela verdade para calcular 10 ^ 11.