在 C 语言中,你如何将一个变量设置为无穷大(或任何保证最大的数值)?
#include <limits.h>
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
INT_MIN
的定义方式。他们不能将其定义为“-2147483648”,因为那意味着“负2147483648”,而2147483648会导致int
溢出! - Alok Singhal获取整数最大值的另一种可移植方法:
unsigned int uMax = (unsigned int)~0;
signed int iMax = (unsigned int)~0 >> 1;
~0
-> 将所有位设置为1 >> 1
-> 通过将所有位向右移动一位来抹去符号位(unsigned int)
在位反转后强制转换为无符号整数,而不是使用~0U
,因为C语言中没有短整型和字符型字面量的后缀(通常指小于int的所有类型)因此,对于最大可能的char
值 - 只需在公式中更改类型转换为无符号字符等。
只需再次取反最大有符号整数表达式中的所有位即可:
signed int iMin = ~((unsigned int)~0 >> 1);
这将第一个标志位设为1,其余的位设为0
int iMax = (unsigned int)~0 >> 1;
替代signed int iMax = (unsigned int)~0 >> 1;
吗? - Mike Smith迄今为止,获取无符号整数类型的最大值的最简单方法是将 (-1) 强制转换为该类型。标准 (§6.2.5/9) 要求对无符号数学进行模运算,模数是可以表示的最大值加一,因此对于任何无符号类型 T
,表达式 ((T)-1)
必然是该类型中可能的最大值。
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
SIZE_MAX
、UINT_MAX
和ULONG_MAX
。通常情况下,应包含limits.h
并使用适当的宏,但了解上述规则也是很好的。此外,SIZE_MAX
不在C89中,因此size_t size_max = -1;
在C89和C99中都可以使用。既然这个问题有C++标签,我建议使用numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
1.0/0.0
实现,但可能会出现编译警告。我不知道C89中的其他可移植方法,但是C99在math.h
中有宏FP_INFINITE
。limits.h
中找到,就像其他人所说的那样。1.0/0.0
不具备可移植性,事实上,使用float
和uint32_t
联合体构建无限大比通过零除更具可移植性。 - R.. GitHub STOP HELPING ICE我猜你可能想看看这个链接:
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;
}
我通常使用在limits.h
中找到的*_MAX
宏来处理整数等。这些将始终正确设置为变量类型。即使是明确大小的类型,例如uint32,在此标头文件中也将具有相应的条目。
这具有变量类型可以容纳的最大可能值的优点。
对于您在问题中提出的无符号整数,您将使用UINT_MAX
# include<math.h> //需要包含的头文件//
int a = INT_MAX; //假设“a”是您想要最大值的整数//