Problemilla con operador XOR y programación en C

Hola a todos.

Estoy haciendo unas prácticas de C y tengo que utilizar el operador XOR. El problema es el siguiente, si yo hago la operación 12^24 me devuelve 20. Ahora imaginad que uso dos variables, a=12 y b=24, al hacer la operación me va a devolver 0 o 1, dependiendo si es verdadero o falso. Como puedo hacer para que me devuelva el valor anterior?

Gracias
XOR (Exclusive OR) table
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

First operation: x1 = x1 XOR x2

x1: 1 0 0
x2: 1 1 1
New x1: 0 1 1

Second operation x2 = x2 XOR x1

x1: 0 1 1
x2: 1 1 1
New x2: 1 0 0

Third operation: x1 = x1 XOR x2

x1: 0 1 1
x2: 1 0 0
New x1: 1 1 1
danielbel escribió:int c = a^b;


Hasta ahí llego, pero eso devuelve 0 o 1.

wah_wah_69 escribió: ...


No lo entiendo [+risas]
Pues es fácil, sustituye 0 por FALSE y 1 por TRUE y lo tienes no?
mande?

(0) ares:~/Documents/pruebas/c ferdy$ cat xor.c
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   int a = 12;
   int b = 24;
   int c = a ^ b;

   printf("%d\n", c);

   return EXIT_SUCCESS;
}
(0) ares:~/Documents/pruebas/c ferdy$ make xor
cc     xor.c   -o xor
(0) ares:~/Documents/pruebas/c ferdy$ ./xor
20
(0) ares:~/Documents/pruebas/c ferdy$


- ferdy
javipm escribió:
danielbel escribió:int c = a^b;


Hasta ahí llego, pero eso devuelve 0 o 1.


Eso no devuelve 1 ó 0, debe de devolver el XOR bit a bit y si lo hace, haces algo mal o el compilador no respeta el estándar C o C++.


--------------------------
Logical operators
NOT !a
AND a && b
OR a || b
Bitwise operators (funciones bit a bit)
NOT ~a (en realidad es complemento a unos, pero lo que hace es un NOT de cada bit por separado)
AND a & b
OR a | b
XOR a ^ b
Pues no se por qué pero ahora funciona y ayer no... reinstalé GCC y ya funcionó todo.

Gracias
No estarías haciendo eso exactamente en el código.

- ferdy
8 respuestas