91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

論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

四川省| 深泽县| 饶阳县| 梁河县| 东宁县| 金溪县| 铁力市| 西乡县| 海南省| 会理县| 汤阴县| 贡嘎县| 霸州市| 广宁县| 开江县| 红桥区| 句容市| 闸北区| 景德镇市| 德庆县| 枣庄市| 海口市| 平武县| 嘉峪关市| 图片| 抚顺市| 晋中市| 山阴县| 册亨县| 台州市| 保德县| 兴文县| 徐汇区| 施秉县| 江西省| 湟中县| 克什克腾旗| 民丰县| 安阳市| 贵阳市| 清涧县|