数値型とは
数値型データとは、数値で表現されるデータで、その大きさや数量を示せて、算術演算が可能なデータです。
数値を扱うためのデータ型
コンピュータでは、こうした数値型データを保存し、演算するために、さまざまなデータ型が提供されています。
型がある利点
複数の型に分けることで、コンピュータのメモリを節約し、エラーを防ぎ、処理速度の向上につながります。
数値型の大きな分類(整数型・小数型)
では数値型はどのように分類されるのでしょうか?
大きく「整数型」と「小数型」に分かれます。
その名の通り、小数点の有無によって整数か小数かが異なります。
Javaの数値型
代表的なプログラミング言語であるJavaの数値型データについて見てみましょう。
整数型(byte / short / int / long)
まずは整数型です。整数型は小数点がない数値です。Javaでは4種類に分類されています。
- byte(1バイト): -128~+127
- short(2バイト): -32,768~+32,767
- 3. int(4バイト): 約 -21億~+21億
- 4. long(8バイト): 約 -9京~+9京
Javaのコードに記述された数値はデフォルトでint型と見なされるため、long型の数値を表すには末尾にLを付けます。
以下のように、変数を初期化することで、それぞれの型にどのような値が入るかが分かります。
byte b = 100;
short s = 30000;
short s = 32768; // エラー!範囲超過
int i = 2000000000;
long l = 9000000000000000000L;
long l = 9000000000000000000; // エラー!int型と見なされてオーバーフローします
小数型(float / double)
小数点を含む数値型はfloatとdoubleの2種類があります。
1. float(4バイト):約 3.4×10^-38 ~ 3.4×10^38
2. double(8バイト):約 1.7×10^-308 ~ 1.7×10^308
Javaでは小数リテラルはデフォルトでdoubleと見なされるため、float型を指定するには末尾にfをつけます。
以下はそれぞれの型での変数初期化の例です。
double d = 3.14159265358979;
float f = 3.14f;
float f = 3.14; // エラー!リテラルがdouble型なのでfloatに代入できない
2.3 型の選び方と注意点
そもそも、数値型が1種類ではなく複数あるのはなぜでしょうか?
それはコンピュータのメモリが有限であるためです。
たとえば数値10を保存したい場合、long にもbyteにも格納できますが、消費するメモリは8バイトと1バイトで大きく異なります。そのため、限られたメモリを効率的に使うために型を分けています。
他の言語
では、Java以外の言語では数値型をどう扱っているのでしょうか?
Python
Pythonでは数値型を大きく3種類:
- int:サイズ制限がなく、非常に大きな整数も扱えます。
- float:小数点を含む数値は float型で保持されます。
- complex:複素数、つまり虚数を含む数も扱えます。
JavaScript
JavaScriptは整数と小数を区別せず、1つの数値型 Number を使用します。整数・小数だけでなくInfinityやNaN(Not a Number)も表現可能です。
C言語
C言語では数値型データを整数型と実数型に分けて使います。
整数型では char, short, int, long, long long があり、それぞれ保存サイズと表せる値の範囲が異なります。
たとえば char は1バイトで -128~127 を保存でき、short は2バイト、int は4バイト、long はシステムによって4または8バイト、long long は8バイトで極めて大きい整数を扱えます。
整数型には signed(符号付き)と unsigned(符号なし)があり、signed は正負両方の値を、unsigned は0以上の正の値のみを扱うことで、同じバイト数でより大きな正の値を表現できます。
実数型では float, double, long double があり、それぞれ 4バイト、8バイト、10~16バイトを使います。
float は小数部約6桁、double は約15桁、long double はコンパイラや環境次第でさらに高い精度を提供し、複雑な実数演算に使われます。
C言語では小数リテラルはデフォルトで double と見なされます。
float を明示する場合は数字の末尾にfを、long double を示すにはLを付けます。
例
3.14f → float, 3.14L → long double
型の扱いが異なる理由
プログラミング言語によって数値型の扱いが異なる理由は、言語の設計思想・目的・用途・実行環境が異なるためです。
たとえばC言語はハードウェアに近い低レベル言語で、メモリ管理や性能が非常に重要なため、整数型と実数型を細かく分け、開発者がメモリ使用を直接制御できるように設計されています。
一方 Pythonは開発の利便性と読みやすさを優先しており、整数型に制限がなく、変数宣言に型指定も不要になるよう設計されています。
Java は中間的なレベルで、メモリと型を厳密に管理しつつ、自動型変換やデフォルト値などの便利機能も提供します。
JavaScript はウェブ開発向けに最適化されていて、数値型をNumberに統一し、型管理を気にせずに素早く開発できるようになっています。
このように、それぞれの言語は対象分野と設計思想に応じて、型の分類や扱いを変えることで、その言語が求める効率的で生産性の高い開発スタイルを実現しています。
まとめ
これまで数値型データと、それに関連するさまざまなプログラミング言語のデータ型についてまとめてきました。
数値型データは、大きさや数量を表現し、算術演算が可能なデータで、整数型と小数型に分類されます。
Java、C言語、Python、JavaScript など、各言語で数値型の表現方法や分類に違いはありますが、根本的な目的は メモリの効率的な利用と正確なデータ処理です。
整数型はメモリを節約して高速な処理が可能ですが、小数点は扱えません。小数型はより広い数の範囲と高い精度で数値を表現できます。
言語ごとに整数型や小数型のサイズ・精度・扱いが異なるため、開発者は 使用する言語の型の特性を理解し、状況に応じて最適な型を選ぶことが重要です。
数値型の概念を正しく理解すれば、プログラミングの基本的なデータ処理能力が向上するだけでなく、性能や安全性を考慮したコードの記述にもつながります。
無料のプログラミングスクール「テクドリ」の卒業生のインタビュー動画を、インスタグラムほか公式SNSにて公開中!