C++の整数型の最小・最大を確認

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アソシエイト

https://amzn.to/3HmgHQC

コメント

タイトルとURLをコピーしました