#1 変数を覗いてみよう (2) (98年11月7日 初版)

1.2 データ型のサイズ  変数の記憶領域はそれぞれのデータ型で決まった大きさを持っています。大きさの単 位はバイト(Byte)で表され、1バイトの大きさは0と1の2進数からなる8つの数の 並びです。この2進数(0〜1)の並びをビット(bit)という単位で表します。 つまり、1バイトは8ビットのことで、8つのビットの並びをいいます。おのおのの変 数型のサイズはマシンにより異なります。UNIXでは整数型は32ビット(4バイト)で、 パーソナルコンピュータでは整数型は、16ビットシステムのコンパイラでは16ビッ ト(2バイト)で32ビットのコンパイラでは32ビット(4バイト)で一般に表され ます。  変数やデータ型の記憶領域のバイト数は sizeof演算子で知ることができます。使い 方は sizeof 単項式 sizeof( 型 ) の2とおりの方法があり、使用されるメモリ領域をバイトで示す整数定数を返します。  char型、int型、float型、double型について、変数の記憶領域サイズと変数が とりうる値の範囲を示すプログラムです。

// size.cpp 
// 各データ型のサイズと限界値 

#include    <iostream.h> 
#include    <limits.h> // 限界特性 
#include    <float.h>  // 浮動小数点 

int main() 
{ 
    cout << "char  型のサイズ ==> " << sizeof( char ) << " Byte: " 
         <<  CHAR_MIN << "〜"  << CHAR_MAX << endl; 

    cout << "int   型のサイズ ==> " << sizeof( int ) << " Byte: " 
         <<  INT_MIN << "〜"  << INT_MAX << endl; 

    cout << "float 型のサイズ ==> " << sizeof( float ) << " Byte: " 
         <<  FLT_MIN << "〜"  << FLT_MAX << endl; 

    cout << "double型のサイズ ==> " << sizeof( double ) << " Byte: " 
         <<  DBL_MIN << "〜"  << DBL_MAX << endl; 

 return 0; 
}
ソースファイル( size.cpp)
CHAR_MIN、CHAR_MAXなどは、その型のとりうる限界値で、ヘッダーファイルlimit.hの 
中で定義されています。また浮動小数点数については float.h の中で定義されている場 
合があります。これらサイズや限界特性は処理系に依存します。 
 下の結果はWindows95/98上での Borland C++ の32ビットコンパイラー BCC32.EXE 
によるものです。 

[実行結果]  
char  型のサイズ ==> 1 Byte: -128〜127                   
int   型のサイズ ==> 4 Byte: -2147483648〜2147483647     
float 型のサイズ ==> 4 Byte: 1.17549e-38〜3.40282e+38    
double型のサイズ ==> 8 Byte: 2.22507e-308〜1.79769e+308
 float型やdouble型に現れた e (または E) は10のべきを意味します。 
1.17549e-38は、1.17549×10^-38のことです。 

(注)以後、地の文で"べき"を表記するのに記号^を用いることにします。 
たとえば10^3は”10の3乗”の意味です。



 int型では4バイトつまり32ビットのサイズですから、2^32通りの組み合わせで整数 
値を表現することになります。これがどれくらいの大きさの数かというと、次の検算のよ 
うに 

9桁の整数になります。 
下限が -2^31 = -2147483648で上限が 2^31 - 1 = 2147483647となります。 

【演習問題1.2】その他のデータ型についてサイズを調べなさい。 


 さて、数値が限界値を超えたらどうなるか、int型について調べてみます。 
// int型の限界値を越えたらどうなるか 

#include    <iostream.h> 
#include    <limits.h> // 限界特性 

int main() 
{ 
    cout << "int 型のサイズ ==> " << sizeof( int ) << " Byte: " 
         <<  INT_MIN << "〜"  << INT_MAX << endl; 

    cout << "\nint 型の最大限界値に数を加えていくと:\n"; 

    int i; 
    for(i = 1; i <= 5; i++) 
       cout << INT_MAX << " + " << i << " = " << ( INT_MAX + i ) << endl; 

    cout << "\nint 型の最小限界値に数を引いていくと:\n"; 
    for(i = 1; i <= 5; i++) 
        cout << INT_MIN << " - " << i << " = " << ( INT_MIN - i ) << endl; 

    return 0; 
}
[実行結果]                             ソースファイル
 
int 型のサイズ ==> 4 Byte: -2147483648〜2147483647    

int 型の最大限界値に数を加えていくと: 
2147483647 + 1 = -2147483648 
2147483647 + 2 = -2147483647 
2147483647 + 3 = -2147483646 
2147483647 + 4 = -2147483645 
2147483647 + 5 = -2147483644 

int 型の最小限界値に数を引いていくと: 
-2147483648 - 1 = 2147483647 
-2147483648 - 2 = 2147483646 
-2147483648 - 3 = 2147483645 
-2147483648 - 4 = 2147483644 
-2147483648 - 5 = 2147483643 
 限界値を超えた正の整数の足し算結果が負の数になりうることが分かります。 
むろん、それはデタラメの値です。 



| 目次 | 前のページ | 次のページ |

Copyright(c) 1998,1999 Yamada, K