面试宝典(PART I)位运算(I)求X和Y的平均数
来源:互联网 发布:网络保险和传统保险 编辑:程序博客网 时间:2024/06/04 23:18
使用位运算实现取平均数
实例代码
#include <cstdio>using namespace std;int func(int x,int );int main(){ printf("result=%d",func(729,271)); return 0;}int func(int x,int y){ return (x&y)+((x^y)>>1);}
输出结果:
可以看到这里的结果就是,两个数的平均数
结果分析:
这个函数可以分为两个部分
一是x&y
这里是按位与,可以理解为相同则保持原状,不同则为0.
很明显这里保存了X和Y相同位置的和的一半。
二是x^y
这里是按位异或,可以相同则为0,不同则为1.
好了,这里也很明显,是不同位的和,注意这里不是一半。
三是(x^y)>>1
右移一位,代表值为原来的一半。
四是(x&y)+((x^y)>>1)
者代表了相同位和的一半加上不同位置的和的一半,结果就是原来的两个数的和的一半,就是二者的平均数。
阅读全文
0 0
- 面试宝典(PART I)位运算(I)求X和Y的平均数
- (x&y) + ( (x^y)>>1 )位运算求平均数
- (x&y) + ( (x^y)>>1 )位运算求平均数
- 面试宝典(PART II)位运算(II)X&(X-1)的几个运用
- 面试---(x&y) + ( (x^y)>>1 )求平均数
- 求x+i*y的相位角
- (x&y)+((x^y)>>1)(面试宝典)
- 位运算求平均数
- 位运算求平均数
- 省赛i题/求1~n内所有数对(x,y),满足最大公约数是质数的对数
- BEC商务英语词汇宝典(g/h/i part)
- 求 (int)X/(int)Y= (int)Z 的笨蛋且不会位运算方法
- (没明白)程序员面试宝典(p39)-----(x&y) + ( (x^y)>>1 )证明
- 使用(x&y) + ((x^y)>>1) 求平均数
- 求平均数 (x&y)+((x^y)>>1)原理
- 使用(x&y) + ((x^y)>>1) 求平均数
- 使用(x&y) + ((x^y)>>1) 求平均数
- 使用(x&y) + ((x^y)>>1) 求平均数
- win10配置java环境变量(javac不是内部命令)
- 知乎网友对线程池的讲解
- 数据库补充学习(3):SQL语言分类及例子
- 菜鸟上路之oracle中rowid和rownum的使用 笔记整理
- 深度优先遍历和广度优先遍历
- 面试宝典(PART I)位运算(I)求X和Y的平均数
- Hololens开发之手势输入
- 高斯模糊
- 数组中和为0的最长子序列 三种变形
- Python自动化运维相关总结
- Lib和DLL区别及DLL的使用方法
- 数组去重,还有输入两个带值变量的交集以及并集
- Path to Python(1)
- php://filter技术分享