Javascript 可以a!=!!b^!!-!a | | |+;!a |!c是否返回除1以外的任何内容?
我在和某人玩Javascript游戏,我们玩得很开心,用荒谬可笑的表达式让我们的输入得到特定的输出 这个可爱的小家伙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 您应该使用模型检查器进行此检查。
!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
都只作为真/假值处理,结果必须是a1
或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