without valores used the solucionar retornan refreshing que page method funciones descargar como another javascript logic

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

Demo en vivo.


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,

  1. b es veraz, en cuyo caso la cláusula ^ es 1 por lo que el derecho de || nunca se alcanza
  2. b es falsey, en cuyo caso la cláusula ^ es 0 por lo que el derecho de || Domina para producir 0 .