1. 程式人生 > >C/C++中如何表示正無窮和負無窮

C/C++中如何表示正無窮和負無窮

我們可以使用系統提供的常量:

如果是int型,可以用INT_MAX表示正無窮,INT_MIN表示負無窮,需要包含標頭檔案limits.h;

如果是double型,可以用DBL_MAX表示正無窮,-DBL_MAX表示負無窮(注意不是DBL_MIN),需要包含標頭檔案float.h。

我們也可以自己設定一個很大的值作為無窮大:

設定一個無窮大常量為0x7fffffff,這個數是32位int型的最大值,符號位為0,其他的都是1。但是這個值在相加時會溢位,這樣兩個無窮大數相加會變成負數。

為了儘量避免以上的錯誤,我們可以將0x3f3f3f3f設為無窮大,這個數已達到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 0x3f3f3f3f
int 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;
}

執行結果如下:

2147483647
-2
1061109567
2122219134
1061109567 1061109567 1061109567 

Process finished with exit code 0