★変数について★


「変数」とは、プログラムで扱う色々なデータを一時的に保管する「場所」です。

ただ、どんな大きさのデータもすべて同じように保管できるのではなく、データに合わせた大きさの「場所」が必要です。

C言語では、大きく分けると「整数型」と「実数(小数)型」の2つの「変数」が使えます。

また、「整数型」は「符号あり」と「符号なし」の2種類が選べます。


・整数型


符号あり
型修飾子 型宣言子 サイズ(ビット) 表現できる最小値 表現できる最大値
signed(省略可) char 8 -128 +127
short 16 -32768 +32767
long 32 -2147483648 +2147483647
int 処理系依存 処理系依存 処理系依存
符号なし
型修飾子 型宣言子 サイズ(ビット) 表現できる最小値 表現できる最大値
unsigned char 8 0 +255
short 16 0 +65535
long 32 0 +4294967295
int 処理系依存 0 処理系依存
※「サイズ」「最小値」「最大値」は一般的な数値を書いています。(VC++ Express Editionのlimits.hを参照)
※処理系によってはまったく異なるケースもあるということを頭に置いておいてください。
int型のサイズ等は処理系によって変わります。基本的には、昔16ビットコンピュータだったころはintのサイズも16ビットでしたし、32ビットコンピュータであれば32ビットでした。64ビットコンピュータや128ビットコンピュータでは、サイズも変わってきます。それぞれの型のサイズを調べるには、下のプログラムを実行してみてください。
「符号あり」と「符号なし」の表を比べてみてください。
型宣言子のサイズは2つとも同じですが、表現できる「最小値」と「最大値」が異なります。
「符号あり」は表現できる最小値が「符号なし」よりも小さいですが、表現できる「最大値」は「符号なし」より小さいです。
つまり、「符号あり」は、表現できる最大値を削って、表現できる最小値(マイナス)を増やしているのです。
逆に、「符号なし」は表現できる最小値(マイナス)を削る代わりに、表現できる最大値を増やしています。

サイズはどちらも一緒ですから、何かを増やすと、何かを減らさないと表現できないわけです。

<sample program col003-01>

#include <stdio.h>

int main( void )
{
    printf( "%d byte\n", sizeof( int ) );

    return 0;
}

これで(signed)int型のサイズがバイト数で表示されます。
1バイトは8ビットです。
intの部分を「char」や「short」「long」「unsigned char」「unsigned short」「unsigned long」等に変えてみて実行してください。

<私の動作環境での実行結果 VC++ Express Edition>

4 byte
続行するには何かキーを押してください・・・

私のコンピュータでは、signed int型は4バイト(32ビット)ですから、上の表のsigned long型と同じ数が表現できるようです。


・小数(実数)型


型宣言子 サイズ(ビット) 有効桁数
float 32 6〜7
double 64 15〜16
※有効桁数とは、正確に表現できる桁数のことです。
※小数の表現は「誤差」という問題があり、非常に小さい数や非常に大きい数は正確に表現できない場合があります。
※整数のように「符号」についての記述がありませんが、整数と小数は内部で表現方法が異なるためです。(しいて言えば小数は符号ありです)
小数については別途説明しようと思います。

・どの変数を使うべきか


整数型で8種類、小数型で2種類の「変数」がありますが、どの変数を使えば良いのでしょうか?

とりあえず、最初のうちは整数であれば、「int」を、小数であれば、「double」を使っていきましょう。

理由は、「int」型は処理系依存ですが、言い換えればその処理系に一番合った形だからです。「double」は最近の処理系では「float」より処理が早いと言われているためです。


・表示方法


それぞれの型についてprintfで表示するための特別な記号があります。

記号 対象
%d 整数(符号あり)
%u 整数(符号なし)
%ld 整数(long)
%f 小数(float,double)

他にも色々ありますが、初心者向けということで、まずは使いそうな記号だけ載せておきます。


・変数の宣言


実際のプログラムで変数を使うには、「こんな型でこんな名前の変数を使うよ!」という宣言が必要になります。

下のプログラムは実行しても何も表示されませんが、宣言の方法を書いています。


<sample program col003-02>

#include <stdio.h>

int main( void )
{
    int a;

    return 0;
}

signed int型で「a」という名前の変数を使うという宣言
※signedは省略可能です。


<sample program col003-03>

#include <stdio.h>

int main( void )
{
    unsigned short b;

    return 0;
}

unsigned short型で「b」という名前の変数を使うという宣言


<sample program col003-04>

#include <stdio.h>

int main( void )
{
    double c;

    return 0;
}

double型で「c」という名前の変数を使うという宣言

このように宣言します。


なお、下のプログラムのように、C言語では、変数宣言は「{」のすぐ下で、「処理」の前、にしかできません。
※C言語ではエラーになりますが、C++はどこで宣言しても良いためエラーになりません。


<sample program col003-05>

#include <stdio.h>

int main( void )
{
    int a;

    printf( "なんらかの処理\n" );

    return 0;
}

次のように書くと、C言語ではエラーになります。


<sample program col003-06>

#include <stdio.h>

int main( void )
{
    printf( "なんらかの処理\n" );

    int a;

    return 0;
}

ただし、私が使っている動作環境はVC++ですから、C++の環境ですので、エラーになりません。
※設定すればC言語としてコンパイルができます。


・変数名について


上のサンプルでは、「a」「b」「c」というアルファベット1文字の変数名を使っていますが、実際にプログラムを組んでいるとアルファベット1文字で書いてある変数は何のための変数か分からなくなる場合が多いです。慣例で一部アルファベット1文字を使う場合(「i」「j」「x」「y」「z」等)を除いて1文字の変数名は避けた方が良いでしょう。

また、変数名も半角アルファベットで書く必要があります。全角文字では記述できません。

変数名に使えるのは、半角アルファベット小文字、大文字、数字、記号の一部(「_(アンダースコア)」等です。

さらに、数字から始まる変数名は付けられません


<sample program col003-07>

#include <stdio.h>

int main( void )
{
    int 変数1;

    int 2kai;

    int mail@;

    return 0;
}

これらは、すべてエラーになります。

※VC++ Express Editionでは、最初の「全角文字」はコンパイル可能です。
※VB等の他のVisualStudio製品との関係でそうなっているのかも知れません。(でも使わないでください!)


ブラウザの戻るボタンで戻ってください。