Cuál es la lógica del operador XOR

Iniciado por okik, 29 Junio 2015, 18:21 PM

0 Miembros y 1 Visitante están viendo este tema.

okik

Hola

Bueno, pues eso. ¿cuál es la lógica?

Vamos a ver de:
5 xor 3 devuelve 6

Según la ayuda de MSDN es porque como 5 = 101 (en binario ) y 3 = 11 pues devuelve  
110 que es el equivalente binario de 6.

En fin, menuda explicación chorra. Yo creo que el/la que lo puso no tenía ni idea. Y si la tenía, se ha explicado como por el culo. Por que ha dicho lo mismo pero con binarios.

Y luego está esto:
"Realiza una exclusión lógica entre dos expresiones de tipo Boolean o bien una exclusión bit a bit entre dos expresiones numéricas."

Más de lo mismo, es peor que el lenguaje administrativo.


Una ayudita porfa
:-(

engel lex

#1
tienes que estudiar operaciones en binario o por contraparte lógica proposicional, las operaciones binarias carecen de todo sentido matematico (viendolo en sistema decimal)


pero te ahorro la explicación larga (aunque necesitarás estudiar lo ya dicho si quieres entender más)

los operarios binarios se manejan por "tabla de verdad"

1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0


las operaicones binarias se hacen bit a bit (dah)

5 = 101
3 = 11, para ajustarlo al 5, 011

101
011

1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0

respusta 110 = 6

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Gh057

Buen día okik, en un sentido formal, una exclusión entre dos proposiciones es un conector lógico cuyo valor de la verdad resulta falso sólo si ambas proposiciones son coincidentes, y cierto de cualquier otra forma. Existen diferentes contextos dónde se utiliza la disyunciones o exclusiones lógicas, como por ejemplo circuitos... -el inclusivo se amplía a verdadero excepto en el caso que ambas proposiciones sean falsas- en bits el ejemplo que diste sería:

101
011
----
110

Saludos
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

okik

#3
Gracias Gh057 Y [/b]engel lex[/b], me lo has dejado más claro, voy entendiendo la lógica.

He comprendido lo de bit a bit con el 101 y 011, se compara dígito por dígito. Pero
porqué...
Código (xml) [Seleccionar]

1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0


es decir ¿porqué 1 xor 0 es 1?, lo entendería se fuera 1+0 =1
¿Porqué 0 xor 1  es 1? como antes si fuera 0+1= 1
Pero llega el 1 xor 1, ¿Porqué diantres es 0? Si resto rompe la regla anterior

Sl2



y 1 + 1 = es 10 en binario

engel lex

Citares decir ¿porqué 1 xor 0 es 1?, lo entendería se fuera 1+0 =1
¿Porqué 0 xor 1  es 1? como antes si fuera 0+1= 1
Pero llega el 1 xor 1, ¿Porqué diantres es 0? Si resto rompe la regla anterior

me siento completamente ignorado -.-


xor significa "exclusivamente o" es decir "es es hombre o es mujer, pero no puede ser ambos al mismo tiempo y siempre tinene que ser uno"


lee sobre logica proposicional -.- esto no es algo que no pueda ser explicado en los primeros 2 parrafos de cualquier texto de logica
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Gh057

Justamente por lo que te he indicado anteriormente; si tomas el bit 1 como verdadero, y 0 como falso cualquier proposición p xor q mientras sean diferentes - no importa el orden- te dará 1. Sinó 0, o lo que es lo mismo, siguiendo el criterio anterior, falso.

-tal cual lo indicado por engel lex-

Te recomiendo leer sobre álgebra de boole, tablas de verdad, y sus aplicaciones tanto en circuitos o en lógica proposicional.

Con esos conceptos con solo dos proposiciones por ejemplo p q, y como interactúan con los conectores lógicos AND OR XOR o sus negaciones (¬p ¬q) podrás comprender luego las mismas implementadas en el manejo de bits. Saludos
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

okik

#6
engel lex No te ignoro, de hecho el comentario anterior era dirigido a ti, lo que pasa es que hice un copia y pega el alias y no me di cuenta que no era tuyo. :silbar:

En fin gracias  los dos

Vale ahora entiendo, gracias a esta explicación más mundana:
Código (xml) [Seleccionar]
"es es hombre o es mujer, pero no puede ser ambos al mismo tiempo y siempre tinene que ser uno"

Sinceramente, ahora que lo veo, no sabría, en programación como usar esto. He visto códigos que lo usaban y sabía lo que hacían, es decir, el objetivo de su uso, pero no como opera este operador.

Por ejemplo:
Para pasar el valor A a B y el valor B a A.


Código (xml) [Seleccionar]
A= 5
B= 6

A = A Xor B
B = B Xor A
A = A Xor B

Ahora A= 6 y B= 5


No entiendo qué mente matemática retorcida puede ultramar tal propósito solo para pasar lo de A a B y viceversa, ni aún entendiendo el funcionamiento de dicho operador. En fin, será cosa de genios.

Nunca he estudiado  lógica proposicional, de hecho aunque he estudiado matemáticas, no tenía ni idea de esta rama, sí de la lógica en sí (aunque no la he tocado), pero no de Lógica proposicional.




Álgebra de Boole, lo explica genial gracias. A veces uno no sabe por donde tirar si no pregunta

https://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole

engel lex

el codigo que mostraste es puro reto... (intercambio con solo 2 variables)


el xor no es una operación común, se usa por lo general para cifrados y cosas similares...

se puede usar en un IF si deseas que se cumpla una sola condicion

otro uso es para simplificar permisos, por ejemplo en linux 777 es permiso de todo para todos, se explica

UGO (usuario, grupo, otros)
1(001) = leer
2(010) = escribir
4(100) = ejecutar

así que si quieres dar permisos de todo (111)  es 7

para leerlo harías

if(codigo xor 1){
    puede_leer()
}
if(codigo xor 2){
    puede_escribir()
}
if(codigo xor 4){
    puede_ejecutar()
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Gh057

Huy lindo ejemplo... XD trataré de ampliarlo:

si A es 5 (base 10) -> 101 (2)
si B es 6 (base 10) -> 110 (2)

entonces si A = A XOR B
101
110
----
011 (lo almacenas en A)

idem si B = A XOR B
011
110
----
101 (lo almacenas en B)

ahora bien, si haces nuevamente A = A XOR B...
011
101
----
110

Entonces... ahora A será 110 o sea 6, y B 101, que equivalea  5 en decimal. XD

Te recomiendo leer sobre el tema, antes de seguir con la parte práctica. Cualquier consulta, si puedo intentaré responderla. Un cordial saludo.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

okik

Cita de: Gh057 en 29 Junio 2015, 19:20 PM
Huy lindo ejemplo... XD trataré de ampliarlo:

si A es 5 (base 10) -> 101 (2)
si B es 6 (base 10) -> 110 (2)

entonces si A = A XOR B
101
110
----
011 (lo almacenas en A)

idem si B = A XOR B
011
110
----
101 (lo almacenas en B)

ahora bien, si haces nuevamente A = A XOR B...
011
101
----
110

Entonces... ahora A será 110 o sea 6, y B 101, que equivalea  5 en decimal. XD

Te recomiendo leer sobre el tema, antes de seguir con la parte práctica. Cualquier consulta, si puedo intentaré responderla. Un cordial saludo.

Ahora mismo estaba yo descomponiendo mi ejemplo como lo has hecho tú, la verdad es que visto así se ve claro. Pero de todos modos hay que ser un poco lumbreras para tirar por ese camino, o por lo menos tener mucha práctica.


Gracias de nuevo a los dos.