【问题标题】:php complicated boolean expressionphp复杂的布尔表达式
【发布时间】:2014-12-11 12:35:17
【问题描述】:

我昨天去面试了,我得到了以下测试问题:

这个逻辑的输出是什么:

if(TRUE && FALSE AND TRUE OR 1 || TRUE && ((TRUE || FALSE) || FALSE)) {
   PRINT "A";
} 
else print "B";

我不得不在脑海中评估结果,这是我做不到的。

你会怎么做?

【问题讨论】:

  • 你为什么不创建一个简短的 php 脚本并测试你的作业?
  • 我无法创建脚本,因为我必须在纸上回答问题。在这次工作面试中无法使用计算机。

标签: php boolean expression logical-operators evaluation


【解决方案1】:

表达式在中间,在任何括号之外:OR 1 ||。左右表达式如何计算无关紧要,最后它们与OR TRUE结合,结果总是TRUE

打印的值为A

【讨论】:

  • 我又查看了 php 运算符优先级页面,现在我认为因为 && 运算符具有最高的优先级,它将首先转换为如下内容: (TRUE) && (FALSE AND TRUE OR 1 || TRUE) && ((TRUE || FALSE) || FALSE) 并且因为所有这三个带括号的表达式的内容都是 TRUE 这就是结果将为 true 的原因。
  • 主要的一点是,在没有计算机的情况下在纸上解决这个问题非常棘手。我认为在求职面试的论文上提出这种问题是非常非常愚蠢的。在我十年的经验中,我从未在现实生活中的 php 程序中遇到过这样的表达,或者任何接近于此的表达。
  • 括号 ((TRUE || FALSE) || FALSE) 的计算结果为 TRUE。表达式变为((TRUE && FALSE) AND TRUE) OR (1 || (TRUE && TRUE));我添加了括号以显示评估顺序。 1 || anythingTRUE(...) OR TRUETRUE
  • 确实,这不是一个好的面试问题。我想我从来没有写过这么复杂的表达式,而且在过去的几年里,我避免在一个表达式中写多个布尔运算符。更多会使代码难以理解。
【解决方案2】:

看看OR 1 因为这是在......好吧,让我们称之为顶级它将是真实的或其他任何东西......这导致“真实”;)

【讨论】:

    【解决方案3】:

    结果将打印A

    它将进入if

    说明:

    真 && 假与真或 1 ||真 && ((真 || 假) || 假)

    TRUE && FALSE -> FALSE -> 让它命名为 FALSE(1)

    FALSE(1) AND TRUE -> FALSE -> 让它命名为 FALSE(2)

    FALSE(2) OR 1 -> TRUE -> 让它命名为 TRUE(3)

    -----现在是第二部分------------

    真 --> 真 (4)

    ((真||假)->真(5)

    正确 (5) ||错误 --> 正确 (6)

    现在

    结合两个表达式:

    真(3) || TRUE(6) 是TRUE

    【讨论】:

    • TRUE && FALSE -> TRUE -> LETS NAME IT TRUE(1)真假为假
    • 嗯,正在更新答案/
    • 你错过了TRUE (4) && TRUE(6)
    猜你喜欢
    • 2014-02-22
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2012-02-15
    • 2015-02-05
    • 2012-04-18
    相关资源
    最近更新 更多