c语言无穷大的常量,C/C++中如何表示正无穷和负无穷

本文介绍了在编程中如何表示无穷大的数值,包括使用系统提供的常量如INT_MAX、DBL_MAX,以及自定义一个足够大的整数来表示无穷大。讨论了不同表示方法的优缺点,并给出了一种兼顾大小与操作安全性的推荐做法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签:

我们可以使用系统提供的常量:

如果是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

#include

#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

标签:

来源: https://blog.csdn.net/zgcr654321/article/details/83046275

### C语言表示浮点数无穷大的方法 当涉及到超出浮点数表示范围的情况时,在C语言中有特定的方法来处理这种情形。对于`float`类型而言,一旦数值超过了其能够表示的最大值(即 `3.402823466e+38`),则会触发溢出机制并返回特殊值“无穷大”。可以通过如下方式实现: #### 使用预定义宏表示最大值 为了安全地获取`float`类型的上限而不直接硬编码具体的数值,可以利用标准库提供的宏定义。这不仅提高了代码可读性也增强了移植性维护便利性。 ```c #include <stdio.h> #include <float.h> int main() { printf("Float max value is %g\n", FLT_MAX); } ``` 这段程序展示了如何通过访问`<float.h>`头文件中的`FLT_MAX`常量来获得单精度浮点数的最大有限正值[^2]。 #### 表达无穷大概念 针对想要模拟或检测到实际意义上的无穷大情况,则有另外一种做法。例如执行除零操作将会得到正无穷的结果;而负数除以零会产生负无穷的结果。不过更推荐的做法是在必要时候显式指定无穷大量而非依赖异常行为。 ```c #include <stdio.h> #include <math.h> // For INFINITY macro on some systems int main(){ float positive_infinity = 1.0f / 0.0f; float negative_infinity = -1.0f / 0.0f; printf("Positive infinity as a float: %f\n", positive_infinity); printf("Negative infinity as a float: %f\n", negative_infinity); #ifdef INFINITY printf("Using predefined INFINITY constant: %f\n", INFINITY); #endif } ``` 上述例子说明了两种创建`float`类型无穷大的途径:一是通过算术运算自然产生,二是借助于可能存在的编译器内置宏`INFINITY`[^1]。 对于`double`类型来说,同样存在类似的表达形式,只是具体使用的宏名有所区别,比如`DBL_MAX`用于指代双精度下的最大有限值,而不是像某些误解那样认为`DBL_MIN`代表无穷小[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值