C語言編程 求兩個數的平均值方法(三種方法)

第一種方法是最常見的
average=(a + b) / 2這種方式,求兩個數的平均值

第二種方法是
當 a<b 時
averag=a+(b-a)/2

這裏着重介紹的是第三種方法

average=(a&b) + (a^b)>>1

推導過程如下
a + b = (a&b) 2 + (a^b)) ———》average=((a&b)2+(a^b))/2 ————》average=(a&b) + (a^b)>>1

eg:
兩個數爲15和5
15二進制序列低位爲1111
5二進制序列低位爲0101
按位與(&)運算後得到兩者相同的部分0101
按位異或(^)運算後得到兩者不同的部分1010
因爲相同的部分兩者都有,所以要乘以二,再加上不同的部分(至此爲15+5)再除以2就是平均值(10)。
0101爲5,乘以2爲10,加上1010(10)爲20,再除以2就是平均值10.

源代碼實例:

#include<stdio.h>
#include<stdlib.h>
int average(int a, int b)
{
    return (a&b) + ((a^b) >> 1);
}
int main()
{
    int num1, num2;
    int result;
    printf("請輸入兩個數\n");
    scanf("%d%d", &num1, &num2);
    result = average(num1, num2);
    printf("平均值是%d\n", result);
    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章