はじめに
どうも! みなため(@MinatameT)です。
この記事では、sizeof演算子を使って、変数のサイズを取得する方法を説明します。変数はint型だけではなく、さまざまなデータ型で実験してみます。
intやfloatは、データ型の中でも有名です。この記事では、見たことのないようなデータ型も登場するとは思いますが、あまり気にしないでください。
sizeof演算子の文法
文法
- サイズは「sizeof(a)」で取得できます。aは、サイズを取得したい「変数名」です。
- サイズはint型(整数型)で取得されます。
- サイズは「バイト単位」で取得されます。ビット単位ではありません。ちなみに、1バイト = 8ビットです。
使用例は、以下のソースコードを確認してください。
sizeof演算子の使用例
ソースコード
#include<stdio.h>
int main(void)
{
int i; //整数型
unsigned int ui; //符号なし整数型
short int si; //短整数型
unsigned short int usi; //符号なし短整数型
long int li; //長整数型
unsigned long int uli; //符号なし長整数型
float f; //単精度浮動小数点型
double d; //倍精度浮動小数点型
long double ld; //拡張倍精度浮動小数点型
char c; //文字型
unsigned char uc; //符号なし文字型
int Si,Sui,Ssi,Susi,Sli,Suli,Sf,Sd,Sld,Sc,Suc; //サイズ記憶用
Si = sizeof(i);
Sui = sizeof(ui);
Ssi = sizeof(si);
Susi = sizeof(usi);
Sli = sizeof(li);
Suli = sizeof(uli);
Sf = sizeof(f);
Sd = sizeof(d);
Sld = sizeof(ld);
Sc = sizeof(c);
Suc = sizeof(uc);
printf("int型のサイズ = %dバイト\n",Si);
printf("unsigned int型のサイズ = %dバイト\n",Sui);
printf("short int型のサイズ = %dバイト\n",Ssi);
printf("unsigned short int型のサイズ = %dバイト\n",Susi);
printf("long int型のサイズ = %dバイト\n",Sli);
printf("unsigned long int型のサイズ = %dバイト\n",Suli);
printf("float型のサイズ = %dバイト\n",Sf);
printf("double型のサイズ = %dバイト\n",Sd);
printf("long double型のサイズ = %dバイト\n",Sld);
printf("char型のサイズ = %dバイト\n",Sc);
printf("unsigned char型のサイズ = %dバイト\n",Suc);
return(0);
}
大量の変数名が出てきていますが、ソースコードの内容自体は簡単なものです。
上記のソースコードでは、sizeof演算子で取得したサイズを変数に代入してからprintfで出力していましたが、
printf("int型のサイズ = %dバイト\n",sizeof(i));
printf("unsigned int型のサイズ = %dバイト\n",sizeof(ui));
というように、sizeof演算子はprintf内でも使用することができます。
突然ですが、ここで、ソースコード内の「unsigned」について少しだけ説明します。
unsignedがついている型は「符号なし」のもので、マイナスの数が扱えない代わりにプラスの数の扱える範囲が拡張されています。
unsignedがついていない型は「符号あり」のものです。つまり、マイナスの数も扱えます。
それでは、実行結果を以下で確認してみましょう。
実行結果
int型のサイズ = 4バイト
unsigned int型のサイズ = 4バイト
short int型のサイズ = 2バイト
unsigned short int型のサイズ = 2バイト
long int型のサイズ = 4バイト
unsigned long int型のサイズ = 4バイト
float型のサイズ = 4バイト
double型のサイズ = 8バイト
long double型のサイズ = 10バイト
char型のサイズ = 1バイト
unsigned char型のサイズ = 1バイト
この結果からわかることは、
- unsignedがついていても、サイズは変わらない。
- double型のサイズは、float型の倍のサイズ。
などですね。
ちなみに、int型のサイズは、コンパイラーによっては2バイトになることもあります(私の動作環境では、上記の通り「4バイト」になりました。)。
そのため、int型を2バイトで使いたいときはshort int型に、4バイトで使いたいときはlong int型にしておくと良いですね。
今回はここまでです。複雑に見えたかもしれませんが、いかがだったでしょうか? 皆さん、お疲れ様でした。