我有一个int a
需要等于“无穷大”的东西。这意味着
int b = anyValue;
a>b
永远是真的。
C ++是否有任何功能可以使之成为可能?
Max Value
执行的检查,只是语言的实现。
a>b
检查:)
我有一个int a
需要等于“无穷大”的东西。这意味着
int b = anyValue;
a>b
永远是真的。
C ++是否有任何功能可以使之成为可能?
Max Value
执行的检查,只是语言的实现。
a>b
检查:)
Answers:
整数本质上是有限的。您可以通过将设置a
为int
的最大值来获得最接近的值:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
这将是2^31 - 1
(或2 147 483 647
)如果int
是32个位宽您的实现。
如果您确实需要无穷大,请使用浮点数类型,例如float
或double
。然后,您可以通过以下方法获得无穷大:
double a = std::numeric_limits<double>::infinity();
int
解决方案,则必须非常谨慎地进行算术运算:将正数添加到“无穷大”将产生非常意外的结果。
整数是有限的,因此遗憾的是您不能将其设置为真正的无限。但是,您可以将其设置为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编写包装类并重载比较运算符,尽管对于大多数项目而言,这并不是必需的。
max()
或infinity()
该模板,则需要使用+/-infinity()
iff std::numeric_limits<T>::has_infinity
和其他方法,min()
以及max()
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
}
std::numeric_limits<float>::infinity()
。
int最小值和最大值
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
我想您可以将a设置为等于9,223,372,036,854,775,807,但这必须是int64
如果您始终希望a对b感到满意,那么为什么需要对其进行检查?只要将其设置为始终为真
cstdint
)。
int
C ++中的含义和相关类型。
float
s,它的值表示无穷大。