#include
#include
int main()
{
int x = 729;
int y = 271;
printf("%d\n",(x&y)+((x^y)>>1));
}
这道题,书上说是因为&是取相同位,^取不同位,>>1就是除以2,所以是(729+271)/2。我验证过答案,是500没错。但是这题是^之后,先左移了,再加&的。我把最后一行改成((x&y)+((x^y))>>1,结果输出495。按照解题思路,这种算法不才是求平均值吗?为什么结果与预想的不同?