下面代码:
#include <stdio.h>
#include <stdlib.h>
int f(int x,int y)
{
return (x&y) + ((x^y)>>1);
}
int main()
{
printf("%d\n",f(729,271));
return 0;
}
这道题如果用本方法来求解,就都转化成二进制然后按位与。但这样的做法显然不是面试官所期待的,仔细观察就会发现,x&y是取相同的位与,这个的结果是x和y相同位相加的一半,x^y是取x和y的不同位,右移相当于除以2,所以这个函数的功能是取两个数的平均值。即(729+271)/2=500。