中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

論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

锡林浩特市| 惠州市| 大连市| 本溪| 香港| 栖霞市| 太原市| 综艺| 昌江| 奉新县| 盱眙县| 改则县| 嘉祥县| 普陀区| 当雄县| 夏津县| 东辽县| 肥城市| 南充市| 东乌| 鱼台县| 澎湖县| 齐齐哈尔市| 鄱阳县| 韩城市| 桑日县| 巩留县| 卓尼县| 昌江| 贵港市| 南漳县| 罗田县| 阿城市| 博客| 民勤县| 安西县| 长乐市| 枣强县| 施甸县| 诏安县| 加查县|