**解析:**假设两个数是 a, b 。将a和b相同的部分乘以2,加上a和b不同的地方,则为a和b的和,a和b相同的部分为(a&b),a和b不同的部分为(a异或),相同的部分乘以2可以用左移1位,即 “(a&b)>>1”表示,一个二进制左移n位表示乘以2的n次方,同理右移n位表示除以2的n次方。
程序:
int main()
{
int a = 2;
int b = 3;
int ret = ((a&b) << 1) + (a^b);//两个数相同的部分*2(相当于左移1位)+不相同的部分=两个数的和
printf("%d\n",ret);
return 0;
}
不使用(a+b)/2这种方式,求两个数的平均值。
最新推荐文章于 2019-10-31 23:23:55 发布