亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

論C語言兩整數平均值的4種算法

發布時間:2020-07-08 20:50:19 來源:網絡 閱讀:1382 作者:wx5d26a62f6f381 欄目:編程語言
  1. 小學數學中我們就學過一種簡單的求解兩個整數平均數的算法(a+b)/2,當然它同樣適用于我們的C語言

#include<stdio.h>
#include<stdlib.h>
int?main()?{
?int?a?=?10;
?int?b?=?20;
?printf("%d\n",?(a?+?b)?/?2);
?system("pause");
?return?0;
}

論C語言兩整數平均值的4種算法論C語言兩整數平均值的4種算法

但是這種方法有弊端,我們都知道int是4個字節也就是32個比特位如果a和b的數加起來超過×××所能容納的數字,我們就無法得到a和b的平均值

#include<stdio.h>
#include<stdlib.h>
int?main()?{
?int?a?=?2000000000;
?int?b?=?2000000000;
?printf("%d\n",?(a?+?b)?/?2);
?system("pause");
?return?0;
}

論C語言兩整數平均值的4種算法

如圖我們并不能求出a和b的平均值;


2.所以我們在寫代碼過程中為了避免此類情況的發生,我們采用另一種方法a+(b-a)/2,這樣,只要a和b不越界,他們的平均值就可以算出來

圖解

論C語言兩整數平均值的4種算法

用這種方法就不會導致上面的情況發生

#include<stdio.h>
#include<stdlib.h>
int?main()?{
?int?a?=?2000000000;
?int?b?=?2000000004;
?printf("%d\n",?b+(a-b)/2);
?system("pause");
?return?0;
}

論C語言兩整數平均值的4種算法


3.可是如果考慮這個方法的效率的話,我覺得這個方法不太完美,在C語言中除法的算法是最復雜的,時間最長,所以我們應該用一種方法來替代這個除法,大家先看這個算式b+(a-b)>>1;

用2進制右移的方法我們避免了這個問題;

論C語言兩整數平均值的4種算法

#include<stdio.h>
#include<stdlib.h>
int?main()?{
?int?a?=?2000000000;
?int?b?=?2000000004;
?printf("%d\n",?b+((a-b)>>1));
?system("pause");
?return?0;
}

論C語言兩整數平均值的4種算法論C語言兩整數平均值的4種算法

我們得出同樣的答案,并且縮短了這個程序運行時間,使得代碼效率提升。


4.當然我們提到了二進制向右移位來求解,是否還有其它方法來求解呢,最后一種方法:AVG=(a&b)+((a^b)>>1),很多人可能一眼看不懂這個代碼,我們來詳細圖解一下

論C語言兩整數平均值的4種算法論C語言兩整數平均值的4種算法

我們用代碼進行驗證:

#include<stdio.h>
#include<stdlib.h>
int?main()?{
?int?a?=?2;
?int?b?=?10;
?printf("%d\n",?(a&b)+((a^b)>>1));
?system("pause");
?return?0;
}

論C語言兩整數平均值的4種算法




----------------------------------------------------------------------------------------------------------------------------------

總結:以上就是整數求平均數的四種算法,前三種慢慢遞進,解決掉一些潛在bug或著提升計算效率,第四種效率也很高,但是不容易理解,大家還有什么求整數平均數的算法,歡迎在評論區留言

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎鲁特旗| 巴楚县| 讷河市| 都匀市| 健康| 聂荣县| 东源县| 永丰县| 太白县| 郓城县| 新宾| 蓬莱市| 西乌| 偏关县| 桃园市| 泗阳县| 固原市| 通许县| 长宁县| 白朗县| 耿马| 甘谷县| 东光县| 营口市| 海阳市| 张家界市| 东安县| 安乡县| 灵川县| 孟津县| 侯马市| 屏山县| 宿松县| 廊坊市| 安塞县| 电白县| 行唐县| 凤庆县| 同江市| 柏乡县| 宝丰县|