V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
banli
V2EX  ›  问与答

直觉告诉我这个逻辑有猫腻, 可是我还是找不出来, 可能是我想多了。 ( PHP )。

  •  
  •   banli · 2017-06-05 10:21:26 +08:00 · 3110 次点击
    这是一个创建于 2728 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请告诉我,下面的两个表达式是否等价。 有三个条件 A, B, C 和两个 状态 a, b。

    status = ( A && B && C ) ? a : b;

    status = (A || B || C) ? b : a;

    24 条回复    2017-06-10 10:19:03 +08:00
    johnlui
        1
    johnlui  
       2017-06-05 10:30:10 +08:00
    送分题,当然不等价。。。。。
    littleylv
        2
    littleylv  
       2017-06-05 10:31:13 +08:00
    明显不一样。
    johnlui
        3
    johnlui  
       2017-06-05 10:31:21 +08:00
    三者相同的时候就不等价了
    forgcode
        4
    forgcode  
       2017-06-05 10:31:46 +08:00
    不等!
    littleylv
        5
    littleylv  
       2017-06-05 10:32:25 +08:00
    另外这跟 PHP 没关系,任何一种语言都适用。
    楼主你学过计算机的基础吗
    qq8567952
        6
    qq8567952  
       2017-06-05 10:34:48 +08:00
    不等价,A,B,C 都为 true 时,第一个 status 为 a,第二个为 b
    feiyuanqiu
        7
    feiyuanqiu  
       2017-06-05 10:40:12 +08:00
    status1 = ( A && B && C ) ? a : b;
    status2 = (A || B || C) ? b : a;

    当 A、B、C 都为假时,status1 = b, status2 = a
    当 A、B、C 都为真时,status1 = a, status2 = b
    kkhaike
        8
    kkhaike  
       2017-06-05 10:40:45 +08:00
    应该是 (!A || !B || !C) ? b : a;
    littleylv
        9
    littleylv  
       2017-06-05 10:42:05 +08:00   ❤️ 1
    解释太多了你们。
    简单的就是
    A && B == !A || !B
    banli
        10
    banli  
    OP
       2017-06-05 10:44:24 +08:00
    出题失误, 写错了 。 第二个表达是 (!A || !B || !C) ? b : a; 对不住啦。
    mrgeneral
        11
    mrgeneral  
       2017-06-05 10:46:46 +08:00
    高中数学吧,取反的时候符号和本身都得反啊。

    如果是按照#10 修正的话,那就没区别了。
    bukip
        12
    bukip  
       2017-06-05 10:47:44 +08:00
    数字逻辑再读一遍
    littleylv
        13
    littleylv  
       2017-06-05 10:49:01 +08:00
    @banli #10 A && B == !A || !B 这种已经是书里教过的“定理”之类的定论了吧,为什么要怀疑有猫腻?
    jiangzhuo
        14
    jiangzhuo  
       2017-06-05 10:49:17 +08:00
    我们管这门课叫离散数学??
    grayon
        15
    grayon  
       2017-06-05 10:49:44 +08:00
    status

    = ( A && B && C ) ? a : b;

    = !( A && B && C )? b : a;

    = ( !A || !B || !C ) ? b : a;
    banli
        16
    banli  
    OP
       2017-06-05 10:51:00 +08:00
    哦哦。 明白了。 效率就是快
    littleylv
        17
    littleylv  
       2017-06-05 10:53:05 +08:00
    bravecarrot
        18
    bravecarrot  
       2017-06-05 13:00:13 +08:00 via iPhone
    肯定不会等价
    建议 lz 遇到这种不清楚逻辑的画个真值表
    geelaw
        19
    geelaw  
       2017-06-05 13:04:59 +08:00
    @littleylv 错,是

    A && B == !(!A || !B)
    ryd994
        20
    ryd994  
       2017-06-05 13:17:20 +08:00
    @geelaw
    @littleylv
    正规叫法是 De Morgan's law
    vingz
        21
    vingz  
       2017-06-05 13:18:55 +08:00
    不等价,特例,A\B\C 都为 true 的时候
    littleylv
        22
    littleylv  
       2017-06-05 13:34:47 +08:00
    @geelaw #19 哈哈 是的是的 尴尬了
    Sapp
        23
    Sapp  
       2017-06-05 14:36:12 +08:00
    压根没仔细看都不可能等价....
    mingyun
        24
    mingyun  
       2017-06-10 10:19:03 +08:00
    15 楼正解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1322 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:49 · PVG 01:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.