C++での整数型の範囲の確認
ちょっと詰まってたのでメモ。実装依存なのでこのままとは限りません。テスト用コードも載せておきます。
マクロ定義をincludeして確認
climits - cpprefjp C++日本語リファレンス
を参考に、<climits>
を利用して出力しました。
結論
$ g++ check_minmax.cpp && ./a.out
----MAX----
UCHAR_MAX: 255
SCHAR_MAX: 127
CHAR_MAX: 127
USHRT_MAX: 65535
SHRT_MAX: 32767
UINT_MAX: 4294967295
INT_MAX: 2147483647
ULONG_MAX: 18446744073709551615
LONG_MAX: 9223372036854775807
ULLONG_MAX: 18446744073709551615
LONG_LONG_MAX: 9223372036854775807
----MIN----
SCHAR_MIN: -128
CHAR_MIN: -128
SHRT_MIN: -32768
INT_MIN: -2147483648
LONG_MIN: -9223372036854775808
LLONG_MIN: -9223372036854775808
----misc----
CHAR_BIT: 8
MB_LEN_MAX: 16
検証用コード
// 整数型の上限下限のチェック用
// ref: https://cpprefjp.github.io/reference/climits.html
#include <iostream>
#include <climits>
using namespace std;
int main()
{
cout << "----MAX----" << endl;
cout << "UCHAR_MAX:\t" << UCHAR_MAX << endl;
cout << "SCHAR_MAX:\t" << SCHAR_MAX << endl;
cout << "CHAR_MAX:\t" << CHAR_MAX << endl;
cout << "USHRT_MAX:\t" << USHRT_MAX << endl;
cout << "SHRT_MAX:\t" << SHRT_MAX << endl;
cout << "UINT_MAX:\t" << UINT_MAX << endl;
cout << "INT_MAX:\t" << INT_MAX << endl;
cout << "ULONG_MAX:\t" << ULONG_MAX << endl;
cout << "LONG_MAX:\t" << LONG_MAX << endl;
cout << "ULLONG_MAX:\t" << ULLONG_MAX << endl;
cout << "LONG_LONG_MAX:\t" << LLONG_MAX << endl;
cout << endl;
cout << "----MIN----" << endl;
cout << "SCHAR_MIN:\t" << SCHAR_MIN << endl;
cout << "CHAR_MIN:\t" << CHAR_MIN << endl;
cout << "SHRT_MIN:\t" << SHRT_MIN << endl;
cout << "INT_MIN:\t" << INT_MIN << endl;
cout << "LONG_MIN:\t" << LONG_MIN << endl;
cout << "LLONG_MIN:\t" << LLONG_MIN << endl;
cout << endl;
cout << "----misc----" << endl;
cout << "CHAR_BIT:\t" << CHAR_BIT << endl;
cout << "MB_LEN_MAX:\t" << MB_LEN_MAX << endl;
cout << endl;
return 0;
}
検討大事
扱う整数範囲と扱える整数範囲を把握して使う型を決めよう。
int
の上限は20億くらい($2^{31}-1$)は覚えておきます。自戒。符号付きで32bitならこうなるよね。
以上です。
Amazonアソシエイト
Amazon.co.jp
コメント