如何将变量设置为C中可能的最大数量?

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

#include  int x = INT_MAX; 

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

有一个名为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 

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

根据你的注释,你需要一个unsigned int (虽然你说“无符号整数”,所以也许你想要一个整数值,不一定是unsigned int )。

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

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

分别将值SIZE_MAXUINT_MAXULONG_MAX分配给变量。 通常,您应该包含limits.h并使用适当的宏,但很高兴知道上面的规则。 另外, SIZE_MAX不在C89中,所以size_t size_max = -1; 将在C89以及C99中工作。

请注意,仅对无符号整数类型保证溢出行为。

另一种获取无符号整数最大值的可移植方法是将所有位设置为1:

 unsigned int uMax = ~0; 

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

 #include  unsigned x = std::numeric_limits::max(); 

通常这是通过1.0/0.0完成的,但是您可能会收到编译警告。 我不知道在C89中使用其他可移植方法,但C99在math.h有宏FP_INFINITE

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

我通常使用limits.h INT_MAX的* _MAX宏来表示整数等。这些宏将始终为变量类型正确设置。 即使是明确大小的类型(如uint32)也会在此头文件中包含相应的条目。

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

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

我想你可能想看看这个链接:

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; }
#include "math.h" int main(int argc, char**argv) { int x = INFINITY; return 0; } 
  1. 首先,包括一个名为math.h的头文件
  2. 现在,将INT_MAX等同于要设置其最大值的整数。 示例: #include //the header file which need to be included// int a=INT_MAX; //Suppose "a" be that integer whose value you want largest// #include //the header file which need to be included// int a=INT_MAX; //Suppose "a" be that integer whose value you want largest//