1 推導(dǎo)過程如下a + b = (a&b) 2 + (a^b)) ———》average=((a&b)2..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-07-05 18:40:19 來源:網(wǎng)絡(luò) 閱讀:3795 作者:sonissa 欄目:編程語言

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

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

這里著重介紹的是第三種方法

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

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

eg:
兩個數(shù)為15和5
15二進(jìn)制序列低位為1111
5二進(jìn)制序列低位為0101
按位與(&)運(yùn)算后得到兩者相同的部分0101
按位異或(^)運(yùn)算后得到兩者不同的部分1010
因?yàn)橄嗤牟糠謨烧叨加?,所以要乘以二,再加上不同的部分(至此?5+5)再除以2就是平均值(10)。
0101為5,乘以2為10,加上1010(10)為20,再除以2就是平均值10.

源代碼實(shí)例:

#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("請輸入兩個數(shù)\n");
    scanf("%d%d", &num1, &num2);
    result = average(num1, num2);
    printf("平均值是%d\n", result);
    system("pause");
    return 0;
}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI