【问题标题】:How to return opposite of true or false?如何返回真假相反?
【发布时间】:2016-05-10 20:33:04
【问题描述】:

我在公司面试,被问了一个问题,问题有点奇怪所以想请教高手。

问题假设我有返回 bool 类型的函数。让我们这样说:

public bool func(int param)
{
  bool retVal;

 // here is some algorithm which as a result either set the retVal to false or true, 
 // It doesn't matter what is algo, the only thing important is it either do 
 // retVal=false or retVal=true

 // The question is i have to write the algo here which in case 
 // if the previous algo gives us retVal=false then it should 
 // return true and if retVal=true then return false      

}

该算法应该是什么?

【问题讨论】:

  • 你显示的那个函数,不是C。请使用正确语言标签。
  • 有点奇怪,C 采访(如您标记的那样)会询问 bool(而不是 _Bool,例如参见 Is bool a native C type?)。另请参阅上面@JoachimPileborg 的评论。也许是C++?这不是一回事,有些面试官会注意这种混淆。
  • TIL: ! 是一个算法
  • 如果你不知道,申请工作就是浪费大家的时间。您需要一门入门编程课程。
  • @dxiv 没什么奇怪的,bool_Bool 更常用。不过,public 的使用非常奇怪。

标签: c algorithm data-structures


【解决方案1】:

!retVal 与 retVal 相反。如果 retVal 为真,则 !retval 为假,反之亦然

public bool func(int param)
{
 bool retVal
 //your algo;
 return !retVal;

}

【讨论】:

    【解决方案2】:

    我认为你的代码应该是这样的:

    public bool func(int param)
    {
       bool retVal;
       return !retVal;
    }
    

    【讨论】:

    • 我认为不是,这不是有效的 C.
    • 是的,我已经按照问的问题回答了。我想一定是Java代码。
    【解决方案3】:

    如果算法的结果是retval,

    return (!retval);
    

    【讨论】:

    • 为什么是括号?它只会增加混乱。
    • 在许多情况下,添加括号会增加清晰度。返回括号只是一个约定问题。
    • 这反而表明程序员不知道 return 语句是如何工作的,也不知道序列点是如何工作的。
    • 如果您在示例中参考 MISRA C 2004 的第 10.2 节,它提到了return (s32a); 在下面进一步,在同一部分中它还提到了return s16a;。所以这就是为什么我说,这是一个约定俗成的问题。两者都是完全接受的编写 C 代码的方式。以一种方式编写代码不会对一个人的 C 能力产生任何其他推论。
    • MISRA-C 是一个不好的例子,因为它明确不是风格指南。我是众多提供意见的人之一:示例中使用的编码风格与审查期间的评论无关,因为 MISRA-C 只要求存在风格指南,但对其应包含的内容没有任何要求。
    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2012-07-17
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多