Javascript 可以a!=!!b^!!-!a | | |+;!a |!c是否返回除1以外的任何内容?

Javascript 可以a!=!!b^!!-!a | | |+;!a |!c是否返回除1以外的任何内容?,javascript,logic,Javascript,Logic,我在和某人玩Javascript游戏,我们玩得很开心,用荒谬可笑的表达式让我们的输入得到特定的输出 这个可爱的小家伙 !a!=!!b^!!-!a||!+!a|!c 似乎总是返回1。我试图找出原因,但在忘记了所有的之后,我放弃了s a、b和c是否有不返回1的值?如果不是,为什么它总是返回1?这个怎么样: var a = undefined, b=undefined, c=!a alert(!a!=!!b^!!-!a||!+!a|!c) // Output: 0 您应该使用模型检查器进行此检查。

我在和某人玩Javascript游戏,我们玩得很开心,用荒谬可笑的表达式让我们的输入得到特定的输出

这个可爱的小家伙

!a!=!!b^!!-!a||!+!a|!c
似乎总是返回
1
。我试图找出原因,但在忘记了所有的
之后,我放弃了s

a
b
c
是否有不返回
1
的值?如果不是,为什么它总是返回
1

这个怎么样:

var a = undefined, b=undefined, c=!a
alert(!a!=!!b^!!-!a||!+!a|!c)
// Output: 0

您应该使用模型检查器进行此检查。它将为您提供输出0或1的所有值:-)例如,这是一个非常流行的模型检查器。

尝试此演示:

a=0,b=0,c=1=>结果:0

如果有,结果总是0(c不是判别式)。

我假设域(a)=域(b)=域(c)

一些逻辑表达式是,也就是说,它们总是真的。可能是你找到的。试着回答。

简短的回答,是的
a=false,b=false,c=true
是一个反例,因为您的等式与
相同(!!a | |!!b | | | c)

长答覆:

!a!=!!b^!!-!a||!+!a|!c

减少到

((Boolean(a) == Boolean(b)) ^ (!a)) || (Boolean(a) | !c)
因此,所有
a
b
c
都只作为真/假值处理,结果必须是a
1
0
,因为
^
都将布尔值强制为数字

所以很明显(通过检查
|
的右边)如果
a
是真的或者
c
是假的,你会得到
1

如果
a
为假,而
c
为真,则有两种可能性

  • b
    是真实的,在这种情况下,
    ^
    子句是
    1
    ,因此永远不会到达
    |
    的右侧
  • b
    为false,在这种情况下,
    ^
    子句为
    0
    ,因此
    |
    的右侧占主导地位,以生成
    0

  • 您是否尝试过在几个循环中运行它:

    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
    

    for(var a=0;a@Kevin:如果你不在乎,请不要评论。那么你找到了a?我觉得我应该为此绘制卡诺图…我这样做是为了让你的答案不仅仅是指向可能随时不可用的资源的链接。玩得好,但是对于定义的a、b、C值,这是否是“作弊”取决于操作。@mimisbrunr它似乎适用于
    a
    b
    的任何虚假值,以及
    c
    的真实值@mimisbrunr a=0,b=0,c=1-输出0:)+1良好的细分。我以为我已经检查了所有的布尔组合,但我想我没有仔细检查。最好的答案!。。。还有一些特别愚蠢的词,使此评论满足最小长度要求…“可以返回除1以外的任何内容吗?”=>“简短回答,否”。=>它如何返回除1以外的内容的示例,因此简短回答应为“是”。@Peter Generate a;这样你就不会错过任何组合我有一个三重嵌套的循环
    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