这是一道思考题,如何计算a与b的平均数?
我们很容易想到的第一个是:
#include<iostream>
using namespace std;
int main()
{
int a=0,b=0;
cin>>a>>b;
int average = (a + b)/2;
cout<<average<<endl;
}
然而,这种:average = (a + b)/2 存在一种问题,当a和b都大于溢出值的一半的时候,a+b会造成溢出!!
解决方法是:average = a + (b-a)/2
--------------------------------------------------------------------------------------------------------------------
好的,评论区的大佬说了,b-a也可能溢出,毕竟负负得正,
大佬给出来的答案是: (a&b) + ((a^b)>>1)