c++ - 言語 - sizeof() c




整数型がC++で表現できる値の範囲は、どのようにして求められますか? (6)

Cスタイル

limits.hにはint型の最小値と最大値だけでなく、必要とするデータ型も含まれています。

#include <limits.h> // C header
#include <climits> // C++ header

// Constant containing the minimum value of a signed integer (–2,147,483,648)
INT_MIN; 

// Constant containing the maximum value of a signed integer (+2,147,483,647)
INT_MAX;

定数とその共通の値の完全なリストについては、 Wikipedia-limits.hを参照してください。

C ++スタイル

テンプレートベースのC ++メソッドがあります。

  #include <limits>

  std::numeric_limits

次のようになります。

  std::numeric_limits<int>::max();

可能な数字の桁数やデータ型が署名されているかどうかを判断するなどの工夫をすることさえできます:

  // Number of digits for decimal (base 10)
  std::numeric_limits<char>::digits10;

  // Number of digits for binary
  std::numeric_limits<char>::digits;

  std::numeric_limits<unsigned int>::is_signed;

C ++の整数値型のサイズと範囲は、プラットフォーム固有です。 ほとんどの32ビットシステムで見つかった値はVariablesにあります。 データ型。 - C ++ドキュメンテーション 。 特定のシステムの実際のサイズと範囲がどのように決定されますか?


C ++でsizeof()演算子を使用して、値型のサイズ(バイト単位)を決定します。 標準ライブラリヘッダーファイルlimits.hには、整数値型の範囲制限が含まれています。 次のプログラムを実行すると、システムの整数型のサイズと範囲の制限を知ることができます。

#include <stdlib.h>
#include <iostream>
#include <limits>

using namespace std;

int main(int argc, char** argv) {

    cout << "\nCharacter Types" << endl;
    cout << "Size of character type is " << sizeof(char) << " byte." << endl;
    cout << "Signed char min: " << SCHAR_MIN << endl;
    cout << "Signed char max: " << SCHAR_MAX << endl;
    cout << "Unsigned char min: 0" << endl;
    cout << "Unsigned char max: " << UCHAR_MAX << endl;

    cout << "\nShort Int Types" << endl;
    cout << "Size of short int type is " << sizeof(short) << " bytes." << endl;
    cout << "Signed short min: " << SHRT_MIN << endl;
    cout << "Signed short max: " << SHRT_MAX << endl;
    cout << "Unsigned short min: 0" << endl;
    cout << "Unsigned short max: " << USHRT_MAX << endl;

    cout << "\nInt Types" << endl;
    cout << "Size of int type is " << sizeof(int) << " bytes." << endl;
    cout << "Signed int min: " << INT_MIN << endl;
    cout << "Signed int max: " << INT_MAX << endl;
    cout << "Unsigned int min: 0" << endl;
    cout << "Unsigned int max: " << UINT_MAX << endl;

    cout << "\nLong Int Types" << endl;
    cout << "Size of long int type is " << sizeof(long) << " bytes." << endl;
    cout << "Signed long min: " << LONG_MIN << endl;
    cout << "Signed long max: " << LONG_MAX << endl;
    cout << "Unsigned long min: 0" << endl;
    cout << "Unsigned long max: " << ULONG_MAX << endl;

    return (EXIT_SUCCESS);
}

std::numeric_limits見てください


ブーストの数値型を使うのはどうしてですか?

すなわち:

boost::uint32_t
boost::int32_t


次のformullaを適用すると、任意のデータ型の範囲を取得できます。

[-2パワー(N-1)]〜{[+2パワー(N-1)] -1}

「N」はデータ型の幅です。たとえば、JAVAではintの幅は32であり、したがってN = 32です。

これを試してみてください。


#include<stdio.h>  
#include<limits.h>   
void main()  
{  
     printf(" signed data types " );  
     printf(" int min : %d ", INT_MIN); // INT_MIN, INT_MAX, SCHAR_MIN, SCHAR_MAX ....etc  
     printf(" int max : %d  ",INT_MAX);// pre defined constants to get the values of datatypes       
     printf(" signed char min : %d ", SCHAR_MIN);  
     printf(" signed char max : %d ", SCHAR_MAX);  
// similarly for un_signed  
// use %u for control charter, and UINT_MAX, UCHAR_MAX, USHRT_MAX, ULONG_MAX.  
}




types