位操作之两数相加

【1】位操作之两数的平均值

计算机内数值都是以二进制存储的,位操作是直接对内存中二进制进行操作,所以处理速度是非常快的。如果能加深理解位操作,对自己的能力也是一种提升,更容易在面试中,让我们脱颖而出。

面试题之一:计算两个数的平局值

如果我们直接写(a+b)/2,面试官肯定是不愿意看到的,如果用位操作,我们可以这样写:

int ave(int x, int y){
	return (x&y) + ((x^y) >> 1);
}

代码很少,分析一下:首先x&y,&(与)操作只有相对位两个都为1时,结果才为1。本来要进位的没有让它进位,而不需要进位的置为0,这样就得到了进位的值的一半。^(异或)操作两个相同时为0,相异时为1,这样我们得到了不需要进位的值,然后在右移1位,等于是除以2。所以两个运算结束后相加就得到了
(x+y) 的一半。

大学生一枚,所有文章都是自己的笔记,来源于多处,欢迎指出错误,提出宝贵的意见。才开始写博客,没能好好组织语言,谢谢谅解。希望能与各位共同进步~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值