140

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

int b = anyValue;

a>b总是正确的。

C++ 是否有任何特性可以使这成为可能?

4

6 回答 6

158

整数本质上是有限的。您可以获得的最接近的值是设置aint的最大值:

#include <limits>

// ...

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

如果在您的实现中是 32 位宽,那将是2^31 - 1(或2 147 483 647) 。int

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

double a = std::numeric_limits<double>::infinity();
于 2011-12-31T21:11:49.057 回答
79

整数是有限的,所以很遗憾你不能将它设置为真正的无穷大。但是,您可以将其设置为 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

如果您真的需要一个真正的“无限”值,则必须使用双精度或浮点数。然后你可以简单地做到这一点

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

数字限制的其他解释可以在这里找到

快乐编码!

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

于 2011-12-31T21:37:44.383 回答
13

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
}
于 2011-12-31T21:15:09.273 回答
11

这是未来给我的信息:

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

它通过将所有位分配给 1(一)来创建任何机器中可能的最大数字,然后将其转换为无符号数

甚至更好

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

然后在你的代码中使用 INF

于 2017-11-22T12:11:40.793 回答
7

您还可以使用 INT_MAX:

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

它相当于使用 numeric_limits。

于 2016-01-05T16:47:08.577 回答
-2

int 最小值和最大值

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

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

如果您总是希望 a 比 b 更好,为什么需要检查它?只需将其设置为始终为真

于 2011-12-31T21:17:41.580 回答