int f(int x, int y)
{
return ((x&y)+(x^y)>>1);
}
{
return ((x&y)+(x^y)>>1);
}
一个函数如上所示,f(729,271)=?
这个题目来源于程序员面试宝典P39,第五章5.5节,运算符问题。
对于书中的解答并不满意。
解答思路如下:
有两种最简单的情况:
1)x和y完全相同,那么f函数返回结果为(x&y)即x,刚好是两数均值
如x=1000,y=1000;
2)x和y每位都不同,那么f函数返回结果为(x^y)>>1
如x=101,y=10;
这种情况下,x+y结果为111,刚好等于(x^y)右移一位等于除以2,所以也是两数的均值;
其他情况无非是x和y部分位相同部分为不同,完全可以通过以上两种情况组合实现,最终结果也是两数均值。
故答案为500