22

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

4

10 に答える 10

33
#include <limits.h>
int x = INT_MAX;

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

于 2010-02-16T15:29:16.063 に答える
28

この種の定義を保持する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
于 2010-02-16T15:28:35.463 に答える
10

整数の最大値を取得する別のポータブルな方法:

符号なし整数

unsigned int uMax = (unsigned int)~0;

符号付き整数

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

説明

  • ~0->すべてのビットを1に設定
  • >> 1->すべてのビットを1桁右にシフトして、符号ビットを消去します
  • (unsigned int)~0UCにはshort、charリテラルの接尾辞がないため、ビット反転後にunsigned intに型キャストします(一般にintよりも小さいものはすべて)。

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

ボーナス-signedintの最小値

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

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

これにより、最初の符号ビットが1に設定され、残りのビットがゼロに設定されます。

于 2015-10-04T10:34:08.627 に答える
9

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

于 2010-02-16T15:35:29.637 に答える
6

あなたのコメントに基づいて、あなたはunsigned int(「符号なし整数」と言うので、必ずしも整数値が必要なのではなく、unsigned int)が必要です。

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

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

SIZE_MAX値とUINT_MAXULONG_MAXそれぞれ変数に割り当てます。一般にlimits.h、適切なマクロを含めて使用する必要がありますが、上記のルールを知っておくと便利です。また、SIZE_MAXC89にはないのでsize_t size_max = -1;、C99だけでなくC89でも動作します。

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

于 2010-02-16T16:04:59.117 に答える
5

この質問にはC++タグがあるので、numeric_limitsをお勧めします。

#include <limits>

unsigned x = std::numeric_limits<unsigned>::max();
于 2010-02-16T15:42:43.443 に答える
2

通常、これはによって行われ1.0/0.0ますが、コンパイル警告が表示される場合があります。私はC89でそれを行う他のポータブルな方法を知りませんが、C99にはマクロFP_INFINITEがありmath.hます。

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

于 2010-02-16T15:28:57.240 に答える
1

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

これには、そのタイプの変数が保持できる最大の値であるという利点があります。

質問で要求した符号なし整数の場合は、次を使用しますUINT_MAX

于 2010-02-16T15:34:41.740 に答える
1

私はあなたがこのリンクをチェックしたいかもしれないと思います:

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

私はこれを行い、gcc4.4.1で正常に動作します


#include "math.h"

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

于 2010-02-16T15:46:53.750 に答える
-1
  1. まず、math.hという名前のヘッダーファイルをインクルードします
  2. ここで、INT_MAXを、値を最大に設定する整数に等しくします。例:#include<math.h> //the header file which need to be included// int a=INT_MAX; //Suppose "a" be that integer whose value you want largest//
于 2018-07-08T07:20:20.127 に答える