Wan_Jie_1412 2016-11-04 13:38 采纳率: 0%
浏览 805

C语言关于位运算的问题

#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。按照解题思路,这种算法不才是求平均值吗?为什么结果与预想的不同?

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-11-04 13:54
    关注

    不是除以2,而是整除2

    评论

报告相同问题?