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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 蓝桥oj3931,请问我错在哪里
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染