私が持っているint a
「無限大」に等しくする必要があること。これは、
int b = anyValue;
a>b
常に真です。
これを可能にするC ++の機能はありますか?
Max Value
、言語の実装です。
a>b
チェックを実行する必要があると思った:)
私が持っているint a
「無限大」に等しくする必要があること。これは、
int b = anyValue;
a>b
常に真です。
これを可能にするC ++の機能はありますか?
Max Value
、言語の実装です。
a>b
チェックを実行する必要があると思った:)
回答:
整数は本質的に有限です。あなたが得ることができる最も近いのはの最大値に設定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の最大値に設定できます。これは、他の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のラッパークラスを作成して比較演算子をオーバーロードする必要がありますが、ほとんどのプロジェクトでは必要ありません。
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()
。
これは将来の私へのメッセージです。
ただ使用する: (unsigned)!((int)0)
すべてのビットを1(1)に割り当てることにより、任意のマシンで最大の数を作成し、それを符号なしにキャストします。
さらに良い
#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
aを9,223,372,036,854,775,807に設定できると思いますが、それはint64である必要があります
いつもaをもっとおもしろくしたいなら、なぜそれをチェックする必要があるのですか?常にtrueに設定するだけ
cstdint
)。
int
C ++の意味と関連する型について説明しています。
float
無限を表す値を持つsを使用できます。