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