tmm2017 2016-08-08 13:10 采纳率: 100%
浏览 1051
已采纳

在看C++面试题,这个位运算的地方有疑问

图片说明

“x&y是取相同的位与,这个的结果是x和y相同位的一半,x^y是取x和y的不同位,右移相当于除以2” 位运算我知道是咋回事,但是他说的解释我不明白。请各位老师指教

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-08-08 13:43
    关注
     假设两个数的二进制分别是10101111和10010011
    10101111=10000011+00101100
    10010011=10000011+00010000
    我们把它们拆分成两个数字,第一个是每一位如果相同,取这一位的值,不同的取0;第二个数字是如果这一位相同,取0,如果不同,取这一位的值。
    这样两个值相加等于左边的值,这个能理解么?
    
    10000011+10000011=2个(10000011),10000011 and 10000011=10000011,也就是1个(10000011),所以说是一半
    
    右边,因为我们取的不同位,所以如果第一个数字这一位是1,另一边肯定是0,或者相反,不可能都是1,所以
    00101100 or 00010000 = 00101100 + 00010000
    >>1 相当于除以2(好比10进制,1000移动1位成为100,是除以10)
    所以右边也是两数相加的一半。
    因为左边右边相加等于原来的数字,所以两边都是一半也就是原来的数字的一半。
    好比
    a/2+b/2=(a+b)/2
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python