我有一个int a
需要等于“无穷大”的值。这意味着如果
int b = anyValue;
a>b
总是正确的。
C++ 是否有任何特性可以使这成为可能?
整数本质上是有限的。您可以获得的最接近的值是设置a
为int
的最大值:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
如果在您的实现中是 32 位宽,那将是2^31 - 1
(或2 147 483 647
) 。int
如果您确实需要无穷大,请使用浮点数类型,例如float
or double
。然后,您可以通过以下方式获得无穷大:
double a = std::numeric_limits<double>::infinity();
整数是有限的,所以很遗憾你不能将它设置为真正的无穷大。但是,您可以将其设置为 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 编写一个包装类并重载比较运算符,尽管对于大多数项目来说这可能不是必需的。
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
}
这是未来给我的信息:
只需使用:(unsigned)!((int)0)
它通过将所有位分配给 1(一)来创建任何机器中可能的最大数字,然后将其转换为无符号数
甚至更好
#define INF (unsigned)!((int)0)
然后在你的代码中使用 INF
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 更好,为什么需要检查它?只需将其设置为始终为真