C++ の最速および最小の固定幅整数型 (int_least8_t、int_fast8_t、...)

この記事では、int_least8_t、int_fast8_t などの C++ の固定幅整数型の最速型と最小型について学習します。

C または C++ の基本的なデータ型は、char、short、int、および long であり、それぞれがメモリ内でそれぞれ 1、2、または 4,8 バイトを許可します。ただし、このバイトは、使用するコンパイラ、オペレーティング システム、またはハードウェアによって異なる場合があります。

32 ビット コンパイラでは、Long データ型は 4 ビット を割り当てます メモリ内に、64 ビット コンパイラでは 8 バイト を割り当てます つまり、データ型のサイズはコンパイラによって異なります。
この問題を克服するために、C は一定量のメモリ バイトを割り当てる固定幅の整数型を提供しています。

固定幅整数型:

ビット数が固定されている整数データ型は、固定幅整数と呼ばれます。その名前が示すように、メモリに固定バイト数を割り当てると便利です。
固定幅整数を定義するには、プログラマは std 名前空間内に cstdint> ヘッダー ファイルを追加する必要があります。

short、int、long などのデータ型の場合、C++ は最小バイトを指定します。一方、固定幅整数は特定のサイズを保証するため、すべてのプラットフォームでサポートされているわけではないため、移植性がありません。

例: int32_t - 固定メモリ サイズ 32 バイトの整数。

固定型整数には 2 種類あります。

1. 歌った:

intX t :メモリ内の X バイトの符号付き整数。

2. 無印:

uintX t:メモリ内の X バイトを含む符号なし整数。

ここで、x はメモリに保存されているバイト数 (4、8、16、32) です。

利点:

メモリ内の固定バイト サイズを提供します。

欠点:

ポータブルではありません。

固定幅整数の型

C++ は 3 つの固定幅整数型をサポートします。

<オール>
  • 整数の固定サイズ :ユーザーが選択したサイズ
  • 整数の最小固定サイズ :ユーザーユーザーが指定したサイズ以上のサイズ
  • 整数の最速の固定サイズ :指定したサイズ以上のサイズ
  • 整数の固定サイズ

    固定サイズのビットが含まれます。さらに 2 つのグループに分けられます。

    1. 符号付き固定整数

    通常は int(no_of_byte)_t 型で定義される符号付き整数。固定符号付き整数型のリストは次のとおりです:

    • std::int8_t は 1 バイトの符号付きデータ型を定義します。
    • std::int16_t は 16 バイトの符号付きデータ型を定義します。
    • std::int32_t は 32 バイトの符号付きデータ型を定義します。
    • std::int64_t は 64 バイトの符号付きデータ型を定義します。

    2. 符号なし固定整数

    符号なし整数は uint(no_of_byte)_t で定義されます。固定の符号なし整数型のリストは次のとおりです:

    • std::uint8_t は 1 バイトの符号なしデータ型を定義します。
    • std::uint16_t は 16 バイトの符号なしデータ型を定義します。
    • std::uint32_t は 32 バイトの符号なしデータ型を定義します。
    • std::uint64_t は 64 バイトの符号なしデータ型を定義します。

    上記の表から、通常は int(no_of_byte)_t 型で定義される符号付き整数または符号なし整数が uint(no_of_byte)_t で定義されることがわかります。

    例:

    #include <cstdint> 
    #include <iostream>
    int main()
    {
        std::int16_t i{16};
        std::cout << "data :"<<i;
        return 0;
    }
    

    出力:

    data : 5
    

    固定幅の最小整数

    この型は、ビット幅以上の最小の符号付きまたは符号なし整数型を提供します。この型には、8、16、32、または 64 バイトが含まれます。
    彼らはさらに 2 つのグループに分けられました。

    <オール>
  • 最小の符号付き固定幅整数
  • 最小の符号なし固定幅整数
  • 最小符号付き整数

    最小の符号付き整数型には、少なくとも 8、16、32、および 64 ビットの幅が含まれます。
    最小の符号付きタイプのリストは次のとおりです:

    <オール>
  • int_least8_t
  • int_least16_t
  • int_least32_t
  • int_least64_t
  • 最小符号なし整数

    最小の符号なし整数型には、少なくとも 8、16、32、および 64 ビットの幅が含まれます。
    最小の符号なしタイプのリストは次のとおりです:

    <オール>
  • uint_least8_t
  • uint_least16_t
  • uint_least32_t
  • uint_least64_t
  • 例:

    #include <cstdint> 
    #include <iostream>
    //main code
    int main()
    {
        std::cout << "Smallest signed integer in C++  ";
        std::cout << '\n';
    	std::cout << "least 8 bit :  " << sizeof(std::int_least8_t) * 8 << " bits\n";
    	std::cout << "least 16 bit: " << sizeof(std::int_least16_t) * 8 << " bits\n";
    	std::cout << "least 32 bit: " << sizeof(std::int_least32_t) * 8 << " bits\n";
    	std::cout << "least 64 bit: " << sizeof(std::int_least64_t) * 8 << " bits\n";
    	std::cout << '\n';
    	std::cout << "Smallest unsigned integer types in C++  ";
    	std::cout << '\n';
    	
    	std::cout << "least 8 bit :  " << sizeof(std::uint_least8_t) * 8 << " bits\n";
    	std::cout << "least 16 bit: " << sizeof(std::uint_least16_t) * 8 << " bits\n";
    	std::cout << "least 32 bit: " << sizeof(std::uint_least32_t) * 8 << " bits\n";
    	std::cout << "least 64 bit: " << sizeof(std::uint_least64_t) * 8 << " bits\n";
    	return 0;
    }
    

    出力:

    Smallest signed integer in C++  
    least 8 bit :  8 bits
    least 16 bit: 16 bits
    least 32 bit: 32 bits
    least 64 bit: 64 bits
    
    Smallest unsigned integer types in C++  
    least 8 bit :  8 bits
    least 16 bit: 16 bits
    least 32 bit: 32 bits
    least 64 bit: 64 bits
    

    最速の固定幅整数

    この型は、8、16、32、または 64 ビットのメモリを含む、少なくともビット幅の最速の符号付きまたは符号なし整数型を提供します。
    彼らはさらに 2 つのグループに分けられました。

    <オール>
  • 最速の符号付き整数
  • 最速の符号なし整数
  • 最速の符号付き整数

    この最速の符号付き整数型には、少なくとも 8、16、32、および 64 ビットの幅が含まれます。
    最速の署名タイプのリストは次のとおりです:

    <オール>
  • int_fast8_t
  • int_fast16_t
  • int_fast32_t
  • int_fast64_t
  • 最速の符号なし整数

    この最速の符号なし整数型には、少なくとも 8、16、32、および 64 ビットの幅が含まれます。
    最速の符号なしタイプのリストは次のとおりです:

    <オール>
  • uint_fast8_t
  • uint_fast16_t
  • uint_fast32_t
  • uint_fast64_t
  • 例:

    #include <cstdint> 
    #include <iostream>
    //main code
    int main()
    {
        std::cout << "Fastest Signed Integer of Fixed width integer types in C++  ";
        std::cout << '\n';
        std::cout << "Fastest 8:  " << sizeof(std::int_fast8_t) * 8 << " bits\n";
    	std::cout << "Fastest 16: " << sizeof(std::int_fast16_t) * 8 << " bits\n";
    	std::cout << "Fastest 32: " << sizeof(std::int_fast32_t) * 8 << " bits\n";
        std::cout << "Fastest 64: " << sizeof(std::int_fast64_t) * 8 << " bits\n";
    	std::cout << '\n';
    	std::cout << "Fastest Unsigned Integer of Fixed width integer types in C++  ";
    	std::cout << '\n';
    	std::cout << "Fastest 8:  " << sizeof(std::uint_fast8_t) * 8 << " bits\n";
    	std::cout << "Fastest 16: " << sizeof(std::uint_fast16_t) * 8 << " bits\n";
    	std::cout << "Fastest 32: " << sizeof(std::uint_fast32_t) * 8 << " bits\n";
        std::cout << "Fastest 64: " << sizeof(std::uint_fast64_t) * 8 << " bits\n";
    	return 0;
    }
    

    出力:

    Fastest Signed Integer of Fixed width integer types in C++  
    Fastest 8:  8 bits
    Fastest 16: 64 bits
    Fastest 32: 64 bits
    Fastest 64: 64 bits
    
    Fastest Unsigned Integer of Fixed width integer types in C++  
    Fastest 8:  8 bits
    Fastest 16: 64 bits
    Fastest 32: 64 bits
    Fastest 64: 64 bits
    

    もう 1 つ別の例を見てみましょう .

    例:

    #include <cstdint> 
    #include <iostream>
    //main code
    int main()
    {
        std::cout << "Smaller types of Fixed width integer types in C++  ";
        std::cout << '\n';
    	std::cout << "least 8 bit :  " << sizeof(std::int_least8_t) * 8 << " bits\n";
    	std::cout << "least 16 bit: " << sizeof(std::int_least16_t) * 8 << " bits\n";
    	std::cout << "least 32 bit: " << sizeof(std::int_least32_t) * 8 << " bits\n";
    	std::cout << "least 64 bit: " << sizeof(std::int_least64_t) * 8 << " bits\n";
    	std::cout << '\n';
    	std::cout << "Fastest types of Fixed width integer types in C++  ";
    	std::cout << '\n';
    	std::cout << "Fastest 8:  " << sizeof(std::int_fast8_t) * 8 << " bits\n";
    	std::cout << "Fastest 16: " << sizeof(std::int_fast16_t) * 8 << " bits\n";
    	std::cout << "Fastest 32: " << sizeof(std::int_fast32_t) * 8 << " bits\n";
        std::cout << "Fastest 64: " << sizeof(std::int_fast64_t) * 8 << " bits\n";
    	return 0;
    }
    

    出力:

    Smaller types of Fixed width integer types in C++  
    least 8 bit :  8 bits
    least 16 bit: 16 bits
    least 32 bit: 32 bits
    least 64 bit: 64 bits
    Fastest types of Fixed width integer types in C++  
    Fastest 8:  8 bits
    Fastest 16: 64 bits
    Fastest 32: 64 bits
    Fastest 64: 64 bits
    

    説明:

    この出力は、システムによって異なります。 std::fast16_t の値は 16 ビットですが、std::int_fast32_t の値は 64 ビットです。 32 ビット整数は 16 ビット整数よりも処理が速いためです。

    結論:

    実際の問題では、固定幅の整数型は、移植可能で効率的なコードを記述するのに役立ちます。

    知識をチェックしましょう :

    質問

    固定幅整数型を宣言するために必要なヘッダー ファイルはどれですか?

    coniocstdintstdiostdlib 固定幅の整数を定義するには、プログラマは std 名前空間内に ヘッダー ファイルを追加する必要があります。