valores - void(0) javascript href
¿Puede! A!=! B ^ !!-! A ||!+! A |! C devolver algo que no sea 1? (6)
Estaba jugando el juego de Javascript con alguien y nos divertíamos haciendo expresiones ridículas y absurdas para que nuestras entradas obtuvieran una salida particular.
Este pequeño encantador
!a!=!!b^!!-!a||!+!a|!c
Siempre parecía volver 1
. Traté de razonar, pero me rendí después de perder la pista de todos !
s.
¿Existen valores para a
, b
y c
que no devuelvan 1
? Si no, ¿por qué siempre devuelve 1
?
¿Incluso intentaste ejecutarlo en unos cuantos bucles?
for(var a = 0; a<100; a++) {
for(var b = 0; b<100; b++) {
for(var c = 0; c<100; c++) {
if((!a!=!!b^!!-!a||!+!a|!c) == 0) {
console.log(a,b, c);
}
}
}
}
a b c
=====
0 0 1
0 0 2
0 0 3
0 0 4
0 0 5
0 0 6
0 0 7
0 0 8
0 0 9
0 0 10
0 0 11
0 0 12
0 0 13
0 0 14
0 0 15
0 0 16
0 0 17
0 0 18
0 0 19
0 0 20
0 0 21
0 0 22
0 0 23
0 0 24
0 0 25
0 0 26
0 0 27
0 0 28
0 0 29
0 0 30
0 0 31
0 0 32
0 0 33
0 0 34
0 0 35
0 0 36
0 0 37
0 0 38
0 0 39
0 0 40
0 0 41
0 0 42
0 0 43
0 0 44
0 0 45
0 0 46
0 0 47
0 0 48
0 0 49
0 0 50
0 0 51
0 0 52
0 0 53
0 0 54
0 0 55
0 0 56
0 0 57
0 0 58
0 0 59
0 0 60
0 0 61
0 0 62
0 0 63
0 0 64
0 0 65
0 0 66
0 0 67
0 0 68
0 0 69
0 0 70
0 0 71
0 0 72
0 0 73
0 0 74
0 0 75
0 0 76
0 0 77
0 0 78
0 0 79
0 0 80
0 0 81
0 0 82
0 0 83
0 0 84
0 0 85
0 0 86
0 0 87
0 0 88
0 0 89
0 0 90
0 0 91
0 0 92
0 0 93
0 0 94
0 0 95
0 0 96
0 0 97
0 0 98
0 0 99
Algunas expresiones lógicas son tautologies , es decir, siempre son ciertas. Puede ser que encuentres uno. Intenta verificarlo .
Deberías usar un verificador de modelos para este. Le dará todos los valores que generarán 0 o 1 :-) Spin es un verificador de modelos muy popular, por ejemplo.
Prueba esta demostración: http://jsfiddle.net/ugfsW/
a = 0, b = 0, c = 1 => Resultado: 0
El resultado siempre es 0 cuando tienes a = 0, b = 0 (c no es discriminante).
Asumo que el dominio (a) = dominio (b) = dominio (c)
Qué tal esto:
var a = undefined, b=undefined, c=!a
alert(!a!=!!b^!!-!a||!+!a|!c)
// Output: 0
Respuesta corta, sí. a = false, b = false, c = true
es un contraejemplo porque tu ecuación es idéntica a (!!a || !!b || !c)
.
Respuesta larga:
!a!=!!b^!!-!a||!+!a|!c
es
(((!a) != (!!b)) ^ (!!(-!a))) || ((!+!a)|!c)
lo que reduce a
((Boolean(a) == Boolean(b)) ^ (!a)) || (Boolean(a) | !c)
por lo que todos a
, b
solo se tratan como valores de verdad / falsey y el resultado debe ser 1
o 0
desde |
y ^
ambos coaccionan a los booleanos a los números.
Entonces, obviamente (de la inspección del derecho del ||
) si a
es verdad o c
es falsey, se obtiene 1
.
Si a
es falsey y c
es sincero, tienes dos posibilidades,
-
b
es veraz, en cuyo caso la cláusula^
es1
por lo que el derecho de||
nunca se alcanza -
b
es falsey, en cuyo caso la cláusula^
es0
por lo que el derecho de||
Domina para producir0
.