22

您如何在 C 中将变量设置为等于无穷大(或任何保证的最大数值)?

4

10 回答 10

33
#include <limits.h>
int x = INT_MAX;

编辑:在提问者澄清之前回答,我只是在猜测他们想要什么类型。

于 2010-02-16T15:29:16.063 回答
28

有一个名为 limits.h 的文件(至少在 Linux 上有),它包含这种定义,例如

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX 65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN   (-INT_MAX - 1)
#  define INT_MAX   2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX  4294967295U
于 2010-02-16T15:28:35.463 回答
10

另一种获取整数最大值的可移植方法:

无符号整数

unsigned int uMax = (unsigned int)~0;

有符号整数

signed int iMax = (unsigned int)~0 >> 1;

解释

  • ~0-> 将所有位设置为 1
  • >> 1-> 擦除符号位,将所有位右移一位
  • (unsigned int)在位反转后将类型转换为 unsigned int 而不是 using ~0U,因为 C 没有 short,char 文字的后缀(通常小于 int 的所有内容)

因此,为了获得最大可能的char价值 - 只需将公式类型转换更改为 unsigned char 等。

奖金 - 有符号整数的最小值

只需在 max signed int 表达式中再次反转所有位:

signed int iMin = ~((unsigned int)~0 >> 1);

这将第一个符号位设置为一个,其余位设置为零

于 2015-10-04T10:34:08.627 回答
9

到目前为止,获得无符号整数类型最大值的最简单方法是将 (-1) 强制转换为该类型。标准(第 6.2.5/9 节)要求无符号数学以大于可以表示的最大值的数字 1 为模执行,因此对于任何无符号类型T,表达式((T)-1)必然是该类型中可能的最大值。

于 2010-02-16T15:35:29.637 回答
6

根据您的评论,您想要一个unsigned int(尽管您说“无符号整数”,所以也许您想要一个整数值,不一定是unsigned int)。

在 C 中,对于无符号整数类型, value -1,当转换为该类型时,保证是该类型的最大值:

size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;

将值SIZE_MAXUINT_MAX分别赋值ULONG_MAX给变量。一般来说,您应该包含limits.h并使用适当的宏,但很高兴知道上面的规则。此外,SIZE_MAX不在 C89 中,因此size_t size_max = -1;在 C89 和 C99 中都可以使用。

请注意,只有无符号整数类型才能保证溢出行为。

于 2010-02-16T16:04:59.117 回答
5

由于这个问题有一个 C++ 标签,我会建议 numeric_limits:

#include <limits>

unsigned x = std::numeric_limits<unsigned>::max();
于 2010-02-16T15:42:43.443 回答
2

通常这是由 完成的1.0/0.0,但您可能会收到一个编译警告。我不知道在 C89 中执行此操作的其他可移植方式,但 C99FP_INFINITEmath.h.

编辑:显然山姆实际上并不想要无穷大,而是整数限制,可以limits.h像其他人所说的那样找到。

于 2010-02-16T15:28:57.240 回答
1

我通常将 *_MAXlimits.h INT_MAX用于整数等。这些将始终为变量类型正确设置。即使是显式大小的类型(例如 uint32)也会在此头文件中具有相应的条目。

这具有成为该类型变量可以容纳的最大可能值的优点。

对于您在问题中要求的无符号整数,您将使用UINT_MAX

于 2010-02-16T15:34:41.740 回答
1

我想您可能想查看此链接:

http://www.gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html

我这样做了,它在 gcc 4.4.1 上运行良好


#include "math.h"

int main(int argc, char**argv)
{ 
    int x = INFINITY; 
    return 0;
}

于 2010-02-16T15:46:53.750 回答
-1
  1. 首先,包含一个名为 math.h 的头文件
  2. 现在,将 INT_MAX 等同于要设置最大值的整数。例子:#include<math.h> //the header file which need to be included// int a=INT_MAX; //Suppose "a" be that integer whose value you want largest//
于 2018-07-08T07:20:20.127 回答