【发布时间】:2014-07-02 09:44:35
【问题描述】:
我最近遇到了这个面试问题,我不擅长位操作。你们能解释一下函数'f'的作用吗?我不确定这个递归函数是做什么的。
unsigned int f (unsigned int a , unsigned int b)
{
return a ? f ( (a&b) << 1, a ^b) : b;
}
我尝试将代码粘贴到 Visual Studio 中以测试逻辑,但编译器抛出一些错误消息“无法将类型 'uint' 隐式转换为 'bool'。返回中的条件语句 (a ?) 是否缺少某些内容?但我确定面试问题和上面提到的完全一样
【问题讨论】:
-
这是一个非常糟糕的面试问题。
-
这是没有
+geeksforgeeks.org/…的总和 -
这是一个很好的面试问题:对于大多数程序员来说,这不是一个技能测试,而是他们过去是否见过这个技巧。远离那些筛选“愚蠢的程序员技巧”的雇主。
-
@WayneConrad:从这个意义上说,是的,这太棒了;)
-
除了尝试一堆输入并注意到结果以总和结尾并只是说经过这么多测试后它会这样做之外,还有什么办法可以解决这个问题?
标签: c recursion bit-manipulation bit