int f(int x, int y)
{
    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 

 

 

 

posted on 2012-04-06 16:57  子桥  阅读(1426)  评论(1编辑  收藏  举报