20


3

Cで可能な最大数に変数をどのように設定しますか?

Cで変数を無限大(または保証された最大の数値)に等しく設定するにはどうしますか?

10 Answer


31


#include
int x = INT_MAX;

編集:質問者が明らかにする前に答え、私は彼らが望んでいるタイプを推測していた。


26


この種類の定義を保持するlimits.hというファイルがあります(少なくともLinuxにはあります)。

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX 65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN   (-INT_MAX - 1)
#  define INT_MAX   2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX  4294967295U


9


符号なし整数型の最大値を取得する最も簡単な方法は、その型に(-1)をキャストすることです。 標準(§6.2.5/ 9)では、符号なし演算は表現可能な最大値よりも大きい1を法として実行する必要があるため、符号なし型 T`の場合、式((T)-1) `必然的にそのタイプで可能な最大の値になります。


8


整数の最大値を取得する別の移植可能な方法:

符号なし整数

unsigned int uMax = (unsigned int)~0;

符号付き整数

signed int iMax = (unsigned int)~0 >> 1;

説明

  • 〜0→すべてのビットを1に設定する

  • >> 1→すべてのビットを1つ右にシフトして、符号ビットを消去する ポジション

  • `(unsigned int)`ビット反転後のunsigned intへの型キャスト Cにはshort、charリテラルのサフィックスがないため(一般的にintより小さいすべて)、 `〜0U`を使用する代わりに

したがって、可能な限り最大の「char」値については、式の型キャストをunsigned charなどに変更するだけです。

ボーナス-signed intの最小値

max signed int式ですべてのビットをもう一度反転するだけです。

signed int iMin = ~((unsigned int)~0 >> 1);

最初の符号ビットを1に、残りのビットをゼロに設定します


6


コメントに基づいて、「unsigned int」が必要です(「unsigned integer」と言うので、おそらく「unsigned int」ではなく整数値が必要な場合があります)。

Cでは、符号なし整数型の場合、値「-1」は、その型に変換されたときに、その型の最大値になることが保証されています。

size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;

値にそれぞれ SIZE_MAX、` UINT_MAX`および `ULONG_MAX`を割り当てます。 一般に、 `limits.h`をインクルードして適切なマクロを使用する必要がありますが、上記のルールを知っておくと便利です。 また、「SIZE_MAX」はC89にはないため、「size_t size_max = -1;」はC99と同様にC89でも機能します。

オーバーフロー動作は、符号なし整数型に対してのみ保証されることに注意してください。


4


この質問にはC ++タグがあるため、numeric_limitsを提案します。

#include

unsigned x = std::numeric_limits::max();


2


通常、これは 1.0 / 0.0`で行われますが、コンパイルに関する警告が表示される場合があります。 私はC89で他の移植可能な方法を知りませんが、C99には `math.h`にマクロ FP_INFINITE`があります。

編集:どうやらサムは実際には無限を望んでいなかったようですが、整数の制限は他の人が述べているように `limits.h`で見つけることができます。


1


私は通常、整数などに limits.h` INT_MAX`にある* `_MAX`マクロを使用します。 これらは常に変数タイプに対して正しく設定されます。 uint32などの明示的なサイズの型でも、このヘッダーファイルに対応するエントリがあります。

これには、その型の変数が保持できる最大の値であるという長所があります。

質問で求めた符号なし整数の場合、「UINT_MAX」を使用します


1


このリンクをチェックしてみてください。

_ * http://www.gnu.org/s/libc/manual/html_node/Infinity-and-NaN.html* _

私はこれをやったが、gcc 4.4.1でうまく動作する

#include "math.h"

int main(int argc, char**argv)
{
    int x = INFINITY;
    return 0;
}


-1


  1. まず、math.hという名前のヘッダーファイルをインクルードします。

  2. ここで、INT_MAXを、値を設定する整数に等しくします 最大。 例: `#include //含める必要があるヘッダーファイル// int a = INT_MAX; //「a」は、その値を最大にする整数です// `