longとintの違いとは?あつかう範囲や名前の由来もプログラマーがわかりやすく解説
そもそも何の長さ?整数型変数のビット数
コンピュータの世界でよく聞く言葉が「ビット」です。例えば64ビットコンピュータとか使います。このビットとはなんでしょうか。実はビットは情報の単位です。コンピュータは0か1かで動くとよく言いますが、この0か1かという2通りが1ビットになります。
例えば4ビットあれば16通り、8ビットあれば256通り、nビットあれば2のn乗通りです。これで数を表せば、4ビットなら0〜15、8ビットなら0〜255、nビットなら0〜2のn乗-1までになります。つまり「扱う数の範囲」というものがビットの数で変わるわけです。ビットは0か1なので4ビットなら1111、8ビットなら11111111のように数字が大きくなるほど長くなります。だから長い・短いと表現するわけです。
signed?unsigned?いろいろな種類のあるint一族
整数には正の数と負の数があります。一方、正の数しか使わないときも多いです。例えば、ものを数えるときは負の数は使いませんよね。コンピュータでは数をビットの数で表現します。
4ビットで16通りの数を表す場合を考えて見ましょう。このとき符号がない0〜15とみなすか、符号がある-8〜7とみなすかという2つの考え方があります。これがsignedとunsignedです。
符号のあるintをsigned int、ないintをunsigned intと呼びます。日本語では符号付き整数と符号なし整数です。符号付きだけあればよさそうに思えますが、符号が要らない場合も多いですよね。そうすると負の数を表す半分を使わないのはもったいないという考え方から符号付きと符号なしという考え方をC言語では取り入れています。省略した場合はsignedとみなされる決まりです。
実は同じ長さのことも?C言語の不思議
整数型の変数の長さが違う、それがintとlongと説明してきましたが、具体的な長さはどうなっているのでしょう。実はC言語のルールでは、厳密にどれがどの長さというのは決まっていません。決まっているのは「short ≦ int ≦ long」という関係だけです。=が入っている不等号なので、実は全部同じという可能性もあります。コンピュータ毎に事情もあるので特に決めていなかったのです。
ただし、現代のコンピュータではおおむね決まっています。代表的なものを以下に挙げておきますので、参考にしてください。
・符号付き(signed)
・short int 16ビット(-32,768〜21,767)
・int 32ビット(-2,147,483,648〜2,147,483,647)
・long int 64ビット(9,223,372,036,854,775,808〜9,223,372,036,854,775,807)
・符号なし(unsigned)
・unsigned short int 16ビット(0〜65,535)
・unsigned int 32ビット(0〜4,294,967,295)
・unsigned long int 64ビット(0〜18,446,744,073,709,551,615)
C言語以外の言語では?言語によって異なる名前
image by iStockphoto
C言語の例を見てきましたが、他の言語ではどうでしょう。C言語は色々な言語のもとになっているので同じ考え方をしているものもあれば、違うものもあります。いくつかのプログラミング言語を例にして確認していきます。
\次のページで「C++:C言語と同じ考え方」を解説!/