Cで変数を無限大(または保証された最大数の値)に等しくするように設定するにはどうすればよいですか?
#include <limits.h>
int x = INT_MAX;
編集:質問者が明らかにする前に答えました、私は彼らがどんなタイプを望んでいたかを推測していました。
この種の定義を保持する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
符号なし整数型の最大値を取得する最も簡単な方法は、その型に(-1)をキャストすることです。標準(§6.2.5/ 9)では、符号なしの計算は、表現できる最大値より1大きい数を法として実行する必要があるため、符号なしの型T
の場合、式((T)-1)
は、必然的にそのタイプで可能な最大値になります。
整数の最大値を取得する別のポータブルな方法:
unsigned int uMax = (unsigned int)~0;
signed int iMax = (unsigned int)~0 >> 1;
~0
->すべてのビットを1に設定>> 1
->すべてのビットを1桁右にシフトして、符号ビットを消去します(unsigned int)
は、~0U
を使用する代わりに、ビット反転後にunsigned intに型キャストします。これは、Cにshort、charリテラル(一般にintよりも小さいものすべて)の接尾辞がないためです。したがって、可能な限り最大のchar
値を得るには-数式の型キャストをunsignedcharなどに変更するだけです。
Max signedint式のすべてのビットをもう一度反転するだけです。
signed int iMin = ~((unsigned int)~0 >> 1);
これにより、最初の符号ビットが1に設定され、残りのビットがゼロに設定されます。
コメントに基づいて、unsigned int
が必要です(「符号なし整数」と言うので、必ずしも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でも機能します。
オーバーフロー動作は、符号なし整数型に対してのみ保証されることに注意してください。
この質問にはC++タグがあるので、numeric_limitsをお勧めします。
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
通常、これは1.0/0.0
によって実行されますが、コンパイル警告が表示される場合があります。私はC89でそれを行う他の移植可能な方法を知りませんが、C99にはFP_INFINITE
にマクロmath.h
があります。
編集:どうやらサムは実際には無限大を望んでいませんでしたが、他の人が述べているようにlimits.h
で見つけることができる整数の制限。
私はあなたがこのリンクをチェックしたいかもしれないと思います:
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;
}
私は通常、_MAX
limits.h
にある* INT_MAX
マクロを整数などに使用します。これらは、変数タイプに対して常に正しく設定されます。 uint32などの明示的にサイズ設定されたタイプでも、このヘッダーファイルに対応するエントリがあります。
これには、そのタイプの変数が保持できる最大の値であるという利点があります。
質問で要求した符号なし整数の場合は、UINT_MAX
を使用します。