191

Integer.MaxValuejavaのC/C++のような関数で(コンパイラに従って)整数の最大値を見つけるコードはありますか?

4

8 に答える 8

343

C++ の場合:

#include <limits>

次に使用します

int imin = std::numeric_limits<int>::min(); // minimum value
int imax = std::numeric_limits<int>::max();

std::numeric_limits他の型でインスタンス化できるテンプレート型です:

float fmin = std::numeric_limits<float>::min(); // minimum positive value
float fmax = std::numeric_limits<float>::max();

C:

#include <limits.h>

次に使用します

int imin = INT_MIN; // minimum value
int imax = INT_MAX;

また

#include <float.h>

float fmin = FLT_MIN;  // minimum positive value
double dmin = DBL_MIN; // minimum positive value

float fmax = FLT_MAX;
double dmax = DBL_MAX;
于 2009-12-06T14:00:56.640 に答える
33

私はそれが古い質問であることを知っていますが、誰かがこの解決策を使用できるかもしれません:

int size = 0; // Fill all bits with zero (0)
size = ~size; // Negate all bits, thus all bits are set to one (1)

これまでのところ、サイズが符号付き int になるまで、結果として -1 が得られます。

size = (unsigned int)size >> 1; // Shift the bits of size one position to the right.

標準が言うように、変数が符号付きで負の場合はシフトインされるビットは 1 であり、変数が符号なしまたは符号付きで正の場合は 0 です。

サイズは符号付きで負であるため、1 の符号ビットをシフトインしますが、これはあまり役に立ちません。そのため、unsigned int にキャストし、代わりに強制的に 0 をシフトインし、符号ビットを 0 に設定し、他のすべてのビットは 1 のままにします。

cout << size << endl; // Prints out size which is now set to maximum positive value.

マスクと xor を使用することもできますが、変数の正確なビットサイズを知る必要がありました。ビットを前にシフトすることで、int がマシンやコンパイラで何ビット持っているかをいつでも知る必要がなく、追加のライブラリを含める必要もありません。

于 2015-04-22T10:55:43.310 に答える
16
#include <climits>
#include <iostream>
using namespace std;

int main() {
  cout << INT_MAX << endl;
}
于 2009-12-06T14:01:07.420 に答える
1

これは、使用される符号付き整数型のサイズとは無関係であり、gcc -Woverflow が文句を言わない符号付き整数の最大値を取得するために使用するマクロです。

#define SIGNED_MAX(x) (~(-1 << (sizeof(x) * 8 - 1)))

int a = SIGNED_MAX(a);
long b = SIGNED_MAX(b);
char c = SIGNED_MAX(c); /* if char is signed for this target */
short d = SIGNED_MAX(d);
long long e = SIGNED_MAX(e);
于 2016-06-13T08:40:21.840 に答える
1

次のようなコードを書いてみませんか。

int  max_neg = ~(1 << 31);
int  all_ones = -1;
int max_pos = all_ones & max_neg;
于 2012-03-22T14:46:03.097 に答える