Cで変数を無限大(または保証された最大数の値)に等しくするように設定するにはどうすればよいですか?
10 に答える
#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
整数の最大値を取得する別のポータブルな方法:
符号なし整数
unsigned int uMax = (unsigned int)~0;
符号付き整数
signed int iMax = (unsigned int)~0 >> 1;
説明
~0
->すべてのビットを1に設定>> 1
->すべてのビットを1桁右にシフトして、符号ビットを消去します(unsigned int)
~0U
Cにはshort、charリテラルの接尾辞がないため、ビット反転後にunsigned intに型キャストします(一般にintよりも小さいものはすべて)。
したがって、可能な限り最大のchar
値を得るには、数式の型キャストをunsignedcharなどに変更するだけです。
ボーナス-signedintの最小値
maxsignedint式のすべてのビットをもう一度反転するだけです。
signed int iMin = ~((unsigned int)~0 >> 1);
これにより、最初の符号ビットが1に設定され、残りのビットがゼロに設定されます。
符号なし整数型の最大値を取得する最も簡単な方法は、その型に(-1)をキャストすることです。標準(§6.2.5/ 9)では、符号なしの計算を、表現できる最大値より1大きい数を法として実行する必要があります。したがって、符号なしの型T
の場合、式((T)-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
他の人が述べているように見つけることができる整数の制限があります。
私は通常、整数などにある*_MAX
マクロを使用limits.h
INT_MAX
します。これらは常に変数型に正しく設定されます。uint32などの明示的にサイズ設定されたタイプでさえ、このヘッダーファイルに対応するエントリがあります。
これには、そのタイプの変数が保持できる最大の値であるという利点があります。
質問で要求した符号なし整数の場合は、次を使用しますUINT_MAX
私はあなたがこのリンクをチェックしたいかもしれないと思います:
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;
}
- まず、math.hという名前のヘッダーファイルをインクルードします
- ここで、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//