kar*_*yan 5 c recursion bit-manipulation bit
我最近遇到了这个面试问题,我不善于操控.你能解释一下'f'的功能吗?我不确定这个递归函数是做什么的.
unsigned int f (unsigned int a , unsigned int b)
{
return a ? f ( (a&b) << 1, a ^b) : b;
}
Run Code Online (Sandbox Code Playgroud)
我试图在Visual Studio中粘贴代码来测试逻辑但是编译器抛出了一些错误消息"无法隐式地将类型'uint'转换为'bool'.条件语句(a?)在返回中丢失了什么?但是我'我确定面试问题与上面提到的完全相同
好吧,评论中已经有一些人提到这只是增加了两个数字。我不确定有什么比尝试一些输入并记下结果更好的方法来解决这个问题。
前任:
f(5,1) --> returns f(2,4) --> returns f(0,6) --> returns 6
1.) 5&1 = 1 bit shifted = 2: 5^1 = 4
2.) 2&4 = 0 bit shifted = 0: 2^4 = 6
3.) a = 0 so return b of 6
f(4,3) --> returns f(0,7) --> returns 7
1.) 4&3 = 0 bit shifted = 0: 4^3 = 7
2.) a = 0 so return b of 7
Run Code Online (Sandbox Code Playgroud)
在展示了一些输出示例之后,我想您可以假设 f 返回两个输入相加的结果。