140

私はint a「無限大」に等しい必要があるものを持っています。これは、

int b = anyValue;

a>b常に真実です。

これを可能にするC++の機能はありますか?

4

6 に答える 6

158

整数は本質的に有限です。最も近い値は、の最大値に設定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();
于 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に等しくなります

本当に「無限」の値が必要な場合は、doubleまたはfloatを使用する必要があります。次に、これを簡単に行うことができます

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(1)に割り当てることにより、任意のマシンで可能な最大数を作成し、それをunsignedにキャストします。

さらに良い

#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の最小値と最大値

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である必要があります

いつもおろし金になりたいのなら、なぜそれをチェックする必要があるのですか?常に真になるように設定するだけです

于 2011-12-31T21:17:41.580 に答える