首页 > 其他分享 >求两个整数的平均值

求两个整数的平均值

时间:2023-04-16 16:25:37浏览次数:34  
标签:return 平均值 int 相加 整数 实现 两个 溢出

1 普通实现1

求两个整数的平均值,最简单的实现方法就是两个数相加再除以二。

int mean(int x, int y) {
return (x + y) / 2;
}

如果mean的参数是INT_MAX呢? 就溢出了.

2 普通实现2

我们使用右移运算符。

int mean1(int x, int y) {
return (x + y) >> 1;
}
类似

3 普通实现3

那么如果我们不把两个整数直接相加, 而是分别除以2再相加, 是不是就不会溢出了呢?

int mean3(int x, int y) {
return (x >> 1) + (y >> 1);
}
不会溢出了, 但会丢失精度.

3 正确实现1

int mean4(int x, int y) {
return x + ( (y - x) >> 1); //+ - 优先级大于移位 但方便理解
}
y大于x的部分, 除以2 分给x.

正确实现2

int meanRoundDown(int x, int y) {
return (x & y) + ((x ^ y) >> 1);
}
跟上面的理解一样.
image

正确实现3

int meanRoundUp(int x, int y) {
return (x | y) - ((x ^ y) >> 1);
}

image

标签:return,平均值,int,相加,整数,实现,两个,溢出
From: https://www.cnblogs.com/nevertoolate22/p/17323432.html

相关文章

  • MFC-IntersectRect获得两个矩形的交集部分
     HDChdc=::GetDC(m_hWnd);RECTrect={10,10,100,100};RECTrect1={50,50,150,150};RECTrect2;HBRUSHhbr;hbr=CreateSolidBrush(RGB(0,0,255));SelectObject(hdc,hbr);intf=FrameRect(hdc,&rect,hbr);......
  • MFC-UnionRect获得两个矩形的并集部分
     HDChdc=::GetDC(m_hWnd);RECTrect={10,10,100,100};RECTrect1={50,50,150,150};RECTrect2;HBRUSHhbr;hbr=CreateSolidBrush(RGB(0,0,255));SelectObject(hdc,hbr);intf=FrameRect(hdc,&rect,hbr)......
  • inner join查询出现两个相同的列
    使用GROUPBY语句可以使用GROUPBY语句将结果集按照指定的列进行分组,并对每个分组进行聚合操作。在使用GROUPBY语句时,需要将SELECT语句中选择的列和聚合函数中的列全部包含在GROUPBY子句中。SELECTlog_id,log_user_name,user_role,log_dateFROM`back_use......
  • 整数平方和开根号的性能优化
    整数的平方和开根号操作通过sqrt实现性能已经不容易优化,但如果要求精度不高,可以进一步优化,方法有三种:1、isqrt;2、查表法;3、三角函数法1、isqrt即整数平方根,有多种算法。通过询问ChatGPT,AI给出了几种实现,这里取一种比较快的实现:1u32isqrt2(u32x)2{3u32res=0;......
  • 寻找两个正序数组的中位数
    题目描述难度困难给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=......
  • 【230415-1】从1,2,3,......,100这一百个数中,任取两个数,使其能被4整除的取法有几种?
    ......
  • 本周参加两个SAP项目面试后的感想
    本周参加两个SAP项目面试后的感想  本周二和周四,应约参加了2个不同项目的电话面试,感触挺多的。    1,行业经验在很多项目选人的时候具有关键性的决定作用。 A项目,是一个快消品行业的大项目,客户是世界跨国巨头,听对方介绍起来该项目规模庞大,极其复杂,所以他们选人要......
  • Python入门基础实例讲解——两个数字比大小,并输出最大值
    嗨害大家好鸭!我是小熊猫~今天也是给大家带来干货的一天~pycharm永久激活码可以从这里找到我:输出:print()print()方法用于打印输出,最常见的一个函数。比较运算符>:大于,如果运算符前面的值大于后面的值,则返回True;否则返回False<:小于,如果运算符前面的值小于后面的值,则返回True;否......
  • HDU 1042 N! (大整数阶乘)
    这道题开始并不会,是看了别人的代码,自己又改造了一下,代码如下:(PS:这个时候自带大整数运算的java就有优势了)#include<bits/stdc++.h>usingnamespacestd;constintN=20000+10;intans[N];voidfact(intn){ans[0]=ans[1]=1;inttot=1;for(inti=......
  • 两个循环搞定多级菜单列表递归成tree
    菜单类publicstaticclassMenu{Menu(Stringdata){String[]split=data.split("");this.id=Integer.valueOf(split[0]);this.name=split[1];this.pid=Integer.valueOf(split[2]);......