国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

為什么把無窮大INF設置成0x3f3f3f3f?

2019-11-08 18:22:11
字體:
來源:轉載
供稿:網友

編程中無窮大的設定

很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1

但在很多情況下,0x7fffffff會出現錯誤,比如溢出,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做松弛操作,判斷if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]時,若u到v沒有路勁,w[u][v]=0x7fffffff,這樣d[u]+w[u][v]會變成負數,這就產生了錯誤。

為了盡量避免以上的錯誤,我們可以改變無窮大的設定,可以將0x3f3f3f3f設為無窮大,0x3f3f3f3f的10進制表示為1061109567,這個數已達到10^9,足以表示無窮大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,滿足無窮大+無窮大仍為無窮大

當把無窮大設為0x3f3f3f3f時,在做初始化時也很方便,比如在初始化數組a時,可以使用

Memset(a,0x3f,sizeof(a)),因為0x3f3f3f3f的每個字節都是0x3f,如果使用0x7fffffff,需要循環賦值,耗費更多時間

#include<stdio.h>#include<string.h>#define MAX1 0x7fffffff#define MAX2 0x3f3f3f3fint a[3];int main(){	memset(a,0x3f,sizeof(a));	PRintf("%d/n",MAX1);	printf("%d/n",MAX1*2);	printf("%d/n",MAX2);	printf("%d/n",MAX2*2);	for(int i=0;i<3;i++)	printf("%d ",a[i]);	printf("/n");	return 0;}
參考:http://blog.csdn.net/mylovestart/article/details/8238088


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏州市| 资溪县| 娄底市| 新泰市| 泾阳县| 东源县| 金坛市| 南岸区| 社会| 广昌县| 嘉兴市| 濉溪县| 安徽省| 河津市| 南和县| 余庆县| 尼勒克县| 汝城县| 上犹县| 桦南县| 盐边县| 林口县| 揭阳市| 黄陵县| 印江| 农安县| 湖州市| 清苑县| 中阳县| 青冈县| 汶川县| 扶绥县| 泸州市| 金山区| 麻栗坡县| 九江县| 鄂州市| 嵩明县| 甘谷县| 怀宁县| 黄冈市|