开发者社区> 问答> 正文

位运算求平均数

图片描述

解析好像讲的不太清楚,没看懂。高手们详细介绍一下可以么?

展开
收起
a123456678 2016-06-08 16:06:29 1799 0
1 条回答
写回答
取消 提交回答
  • 右移一位就是 floor(n/2)
    所以有 (x+y) shr 1 = floor((x+y)/2)
    但这样可能溢出。

    逻辑异或就是不进位加:
    0^0 = 0
    1^0 = 1
    1^1 = 0
    而逻辑与可以找出进位,所以有:
    x+y = (x&y) shl 1 + (x^y)
    两边右移一位:
    (x+y) shr 1 = ((x&y) shl 1 + (x^y)) shr 1
    因为 (x&y) shl 1 是左移来的最后一位肯定是 0, 相加后这一位不会进位,所以右移一位可以分配进去:
    (x+y) shr 1 = (x&y) + (x^y) shr 1
    这样,由于 (x^y) shr 1 是右移来的,最高位是 0, 所以不会溢出。

    2019-07-17 19:32:12
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载