位运算求解两个数的平均值

简介: 1. 给定两个数x和y,朴素算法求解两个数的平均值是(x+y)/2,但是这种方法有个问题就是当x和y的和溢出的时候得到的平均值是错误的,我们可以采用位运算来解决这个问题。


1. 给定两个数x和y,朴素算法求解两个数的平均值是(x+y)/2,但是这种方法有个问题就是当x和y的和溢出的时候得到的平均值是错误的,我们可以采用位运算来解决这个问题。

    一般对于x和y不大的时候,利用(x+y) >> 1可以得到两个数的平均值

    对于一个数a,a << n表示的是a*2^n;a >> n表示的是a/2^n


2. x和y的平均值可以用以下公式求:(x&y)+((x^y)>>1)

   (x&y)表示的是取出x和y二进制中都为1的数,例如两个数的二进制都为110010&011010,则结果为010010。因为要求平均值则两个位都是1则只要加一个1即可

   (x^y)表示的是x和y表示的异或值,只有两个不同的时候才为1,例如110010^011010为101000。因为要求两个数平均值则这边还要除2直接右移一位即可,即为(x^y)>>1

   

例如

int x = 2147483647;

int y = 2147483647;

cout <<((x+y)>>1)<<endl; //输出的结果为-1

cout<<(x&y)+((x^y)>>1)<<endl; //输出的结果为2147483647


解释一下产生(x+y)>> 1产生-1的情况

(1)int的范围是[-2147483648, 2147483647],当x为最大值的时候,x+1直接到-2147483648 

         则x+y则等于-2

(2)x+y = -2除以2的结果是-1

(3)利用位运算则不存在溢出的情况



目录
相关文章
|
Java 内存技术
IDEA工具debug的小技巧
IDEA工具debug的小技巧
425 0
|
4月前
|
人工智能 监控 算法
小红书突然成立AI一级部门:2026校招,真正的变化开始了
小红书成立AI一级部门Dots及企业智能部,标志AI已从工具升级为大厂核心战略。此举预示:AI正深度重构组织架构、业务流程与校招标准——技术、产品、运营等岗位全面转向“AI+复合能力”。对2026/2027届学生而言,掌握AI工程化应用(如RAG、Agent测试、AI评测)比单纯学算法更关键。机会属于懂业务、会落地、能用AI提效的实战者。
|
存储 大数据 BI
场景题:有40亿个QQ号如何去重?仅1GB内存
在处理大数据去重问题时,如40亿QQ号的去重(仅1GB内存),可采用Bitmap和布隆过滤器两种方法。Bitmap利用位图存储,每个QQ号占1位,总需512MB内存,适用于整型数据;布隆过滤器通过多个哈希函数计算下标,适合字符串或对象去重,但存在误判率。在线人员统计等场景也可使用类似思路,将ID作为偏移值标记在线状态或视频存在性。
648 5
|
机器学习/深度学习 自然语言处理 算法
XGBoost算法
XGBoost是高效、灵活且强大的梯度提升决策树算法,擅长处理结构化数据,广泛应用在数据挖掘和Kaggle竞赛中。它通过迭代地添加决策树优化目标函数,支持自定义损失函数和正则化以防止过拟合。与AdaBoost相比,XGBoost支持更复杂的基分类器,如线性模型,使用二阶导数加速优化,并有内置并行处理能力。XGBoost在模型构建时考虑缺失值处理,并提供了Python等多语言接口,便于参数调优和模型评估,如使用GridSearchCV进行交叉验证。
|
存储 运维 Linux
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南
1353 0
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南
|
Cloud Native 文件存储 数据库
《阿里云产品四月刊》—CPFS 智算版数据流动(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
438 1
|
存储 索引 Python
30天拿下Python之numpy模块
30天拿下Python之numpy模块
227 0
|
消息中间件 机器学习/深度学习 监控
「物联网架构」通过 Kafka和MQTT实现大规模的物联网和事件流
「物联网架构」通过 Kafka和MQTT实现大规模的物联网和事件流
2601 11
|
编解码 Shell 开发工具
05-adb命令之查看设备信息
05-adb命令之查看设备信息
|
Linux 调度
『 Linux 』僵尸进程与孤儿进程
『 Linux 』僵尸进程与孤儿进程

热门文章

最新文章