私は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
またはのような浮動小数点数タイプを使用してください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に等しくなります
本当に「無限」の値が必要な場合は、doubleまたはfloatを使用する必要があります。次に、これを簡単に行うことができます
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(1)に割り当てることにより、任意のマシンで可能な最大数を作成し、それをunsignedにキャストします。
さらに良い
#define INF (unsigned)!((int)0)
そして、コードでINFを使用します
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
私はあなたが9,223,372,036,854,775,807に等しくなるように設定することができると思いますが、それはint64である必要があります
いつもおろし金になりたいのなら、なぜそれをチェックする必要があるのですか?常に真になるように設定するだけです