在C ++中将int设置为Infinity

时间:2011-12-31 21:09:26

标签: c++ infinity

我的int a需要等于“无穷大”。这意味着如果

int b = anyValue;

a>b永远是真的。

是否有任何C ++功能可以实现这一目标?

6 个答案:

答案 0 :(得分:109)

整数本质上是有限的。您最接近的方法是将a设置为int的最大值:

#include <limits>

// ...

int a = std::numeric_limits<int>::max();

如果2^31 - 1在您的实施中为32位宽,则为2 147 483 647(或int)。

如果确实需要无穷大,请使用浮点数类型,例如floatdouble。然后你可以通过以下方式获得无限:

double a = std::numeric_limits<double>::infinity();

答案 1 :(得分:56)

整数是有限的,所以遗憾的是你无法将它设置为真正的无穷大。 但是你可以将它设置为int的最大值,这意味着它将大于或等于任何其他int,即:

a>=b

总是如此。

你可以通过

来做到这一点
#include <limits>

//your code here

int a = std::numeric_limits<int>::max();

//go off and lead a happy and productive life

这通常等于2,147,483,647

如果你真的需要一个真正的“无限”值,你必须使用double或float。然后你可以简单地做到这一点

float a = std::numeric_limits<float>::infinity();

可以找到here

的数字限制的其他说明

快乐的编码!

注意:正如WTP所提到的,如果绝对需要一个“无限”的int,你必须为int编写一个包装类并重载比较运算符,尽管对于大多数项目来说这可能不是必需的。

答案 2 :(得分:12)

int本质上是有限的;没有任何价值可以满足您的要求。

但是,如果您愿意更改b的类型,则可以使用运算符覆盖执行此操作:

class infinitytype {};

template<typename T>
bool operator>(const T &, const infinitytype &) {
  return false;
}

template<typename T>
bool operator<(const T &, const infinitytype &) {
  return true;
}

bool operator<(const infinitytype &, const infinitytype &) {
  return false;
}


bool operator>(const infinitytype &, const infinitytype &) {
  return false;
}

// add operator==, operator!=, operator>=, operator<=...

int main() {
  std::cout << ( INT_MAX < infinitytype() ); // true
}

答案 3 :(得分:3)

这是我将来的一条信息:

只需使用:(unsigned)!((int)0)

它通过将所有位分配给1(1)然后将其转换为无符号

,在任何机器中创建最大可能的数字

更好

#define INF (unsigned)!((int)0)

然后在代码中使用INF

答案 4 :(得分:2)

您也可以使用INT_MAX:

http://www.cplusplus.com/reference/climits/

它相当于使用numeric_limits。

答案 5 :(得分:-3)

int min和max values

Int -2,147,483,648 / 2,147,483,647 Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807

我猜你可以设置等于9,223,372,036,854,775,807,但它需要是一个int64

如果你总是想要一个更大的that,那为什么你需要检查它?只是将它设置为真实