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

时间:2010-02-16 15:24:23

标签: c integer limits

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

10 个答案:

答案 0 :(得分:31)

#include <limits.h>
int x = INT_MAX;
编辑:在提问者澄清之前回答,我只是猜测他们想要什么类型。

答案 1 :(得分:26)

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

答案 2 :(得分:9)

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

答案 3 :(得分:8)

获得最大整数值的另一种可移植方式:

无符号整数

unsigned int uMax = (unsigned int)~0;

有符号整数

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

解释

  • ~0 - &gt;将所有位设置为一个
  • >> 1 - &gt;通过将所有位向右移位一个位置来删除符号位
  • 在位反转之后
  • (unsigned int)类型转换为unsigned int而不是使用~0U,因为C没有short的后缀,char文字(一般小于int)

因此,对于最大可能的char值 - 只需更改公式类型转换为 unsigned char等。

奖金 - signed int的最小值

只需在max signed int expression中再次反转所有位:

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

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

答案 4 :(得分:6)

根据您的评论,您需要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中使用。

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

答案 5 :(得分:4)

由于此问题上有C ++标记,我建议使用numeric_limits:

#include <limits>

unsigned x = std::numeric_limits<unsigned>::max();

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

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

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

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

答案 8 :(得分: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;
}

答案 9 :(得分:-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//