Java超|ビットとバイトの基本

ビットは0と1を表す最小の気の粒、バイトは8個のビットを束ねたエネルギー単位。ここが分かると、Javaの型のサイズと値の範囲がつながって見えてくる。

Javaのデータ型を学んでいると、byte は1バイト、short は2バイト、int は4バイト、long は8バイトというように、バイト という言葉が何度も出てきます。

最初は、1バイト、2バイト、4バイト、8バイトという数字が、ただの暗記項目のように見えるかもしれません。

しかし、ビットバイト のしくみを知ると、型のサイズと扱える値の範囲がきれいにつながって見えてきます。

Javaの型は、ただ名前が違うだけではありません。
それぞれの型は、コンピュータ内部で使うビット数が違います。
ビット数が違うから、表せる値の数も変わります。
表せる値の数が変わるから、扱える範囲も変わります。

ドラゴンボール風にたとえるなら、ビットは 0か1だけを表す最小の気の粒 です。

1つの気の粒は、消えているか、光っているかの2通りしかありません。

けれども、その気の粒をたくさん並べると、戦闘力、位置情報、合図、文字など、さまざまな情報を表せるようになります。

Java・コンピュータの考え方意味ドラゴンボール風のたとえ
0片方の状態気が消えている状態
1もう片方の状態気が光っている状態
ビット0または1を表す最小単位最小の気の粒
バイト8ビットのまとまり8つの気の粒を束ねたエネルギー束
型のサイズ値を表すために使う容量何個の気の粒で値を表すか
値の範囲表せる値の広さ作れるエネルギーパターンの多さ

コンピュータは、私たちが普段使っている10進数ではなく、内部では0と1だけを使って情報を扱います。

この0と1のしくみが分かると、Javaの型のサイズがただの数字ではなく、値を表すための土台 だと分かってきます。

コンピュータは0と1で数を表している

私たちは普段、0から9までの数字を使う 10進数 で数を表しています。

たとえば、13という数は、1と3を使って表します。

一方で、コンピュータは内部で 0と1だけ を使って値を表します。

この表し方を 2進数 といいます。

表し方使う数字イメージ
10進数0〜9人間が普段使う数の表し方
2進数0と1コンピュータ内部で使う数の表し方

ドラゴンボール風にたとえるなら、2進数は 消えている気光っている気 だけで情報を送る暗号です。

使える状態は2つだけです。

2進数の値ドラゴンボール風のイメージ
0気が消えている
1気が光っている

0と1だけでは、最初は少ない情報しか表せないように見えます。

でも、0と1をたくさん並べることで、多くの情報を表せます。

たとえば、次のような並びです。

00101110

人間から見ると、ただの0と1の列に見えるかもしれません。

しかし、コンピュータにとっては意味のある情報です。

Javaの型のサイズを理解するには、この0と1の並びが 何桁あるのか がとても大切です。

桁数が増えるほど、表せる状態の数が増えるからです。

ビットとは2進数の1桁分

ビット とは、2進数の1桁分を表す単位です。

たとえば、次の2進数を見てみます。

00101110

この中に並んでいる0や1のひとつひとつが、1ビットです。

単位表せる値ドラゴンボール風のイメージ
1ビット0または1気の粒が消えているか、光っているか

1ビットだけでは、表せる状態は2通りです。

0
1

つまり、1ビットはとても小さな情報単位です。

ドラゴンボール風に言えば、1ビットは最小の気の粒です。

その気の粒は、消えているか、光っているかのどちらかしか表せません。

でも、ビットを複数並べると、表せる状態が増えていきます。

ビット数表せる組み合わせ
1ビット0、1
2ビット00、01、10、11
3ビット000、001、010、011、100、101、110、111

1つの気の粒では2通りだけ。

でも、2つ並べると4通り。
3つ並べると8通り。

このように、ビットは小さい単位ですが、並べることで一気に表現力が増えていきます。

バイトとは8ビットをまとめた単位

バイト とは、8個のビットをまとめた単位です。

つまり、次の関係になります。

1バイト = 8ビット

たとえば、次の2進数は8桁あります。

00101110

これは8ビットなので、1バイトにあたります。

単位内容
1ビット2進数の1桁
1バイト8ビット

ドラゴンボール風にたとえるなら、ビットは1つの気の粒です。

バイトは、その気の粒を8個束ねた エネルギー束 です。

1つの気の粒だけでは少ない情報しか表せません。

しかし、8個そろうと、かなり多くのパターンを作れるようになります。

Javaのデータ型で出てくるサイズも、このバイトをもとに考えます。

型のサイズビット数
1バイト8ビット
2バイト16ビット
4バイト32ビット
8バイト64ビット

この対応を知っておくと、Javaの型の表が読みやすくなります。

short は2バイトなので、16ビットです。
int は4バイトなので、32ビットです。
long は8バイトなので、64ビットです。

つまり、型のサイズを見るということは、その型が何個のビットを使って値を表しているのかを見ること でもあります。

図:ビットとバイトの関係

この図が示していること

この図は、2進数の1桁が1ビットであり、8個のビットをまとめると1バイトになることを示しています。

0や1のひとつひとつは小さな情報ですが、それを8個並べることで1つのまとまりとして扱えるようになります。

この図から分かることは、Javaの型で出てくる1バイト、2バイト、4バイト、8バイトという表現が、実際には 何個のビットを使って値を表すのか という話につながっているということです。

1バイトが8ビットだと分かると、2バイトは16ビット、4バイトは32ビット、8バイトは64ビットと考えられるようになります。

ビット数が増えると表せる値の数も増える

ビット数が増えると、表せる値の数も増えます。

これは、Javaの型のサイズと値の範囲を理解するうえでとても大切です。

まず、1ビットを考えます。

0
1

1ビットでは、0か1の2通りです。

次に、2ビットを考えます。

00
01
10
11

2ビットでは、4通りを表せます。

さらに、3ビットでは次の8通りです。

000
001
010
011
100
101
110
111

つまり、ビットが1つ増えるごとに、表せる通り数は2倍になります。

ビット数表せる通り数
1ビット2通り
2ビット4通り
3ビット8通り
8ビット256通り
16ビット65536通り

この関係は、次のように表せます。

考え方内容
nビット2n通りの値を表せる
8ビット28 = 256通り
16ビット216 = 65536通り

ドラゴンボール風にたとえるなら、気の粒の数が増えるほど、作れるエネルギーパターンが増えるイメージです。

1つの気の粒なら、消えているか光っているかの2通りだけです。

でも、16個の気の粒を並べれば、とても多くの組み合わせを作れます。

このしくみがあるから、型のサイズが大きいほど、表せる値の範囲も広くなります。

1バイトで表せる値は256通り

1バイトは8ビットです。

そのため、1バイトで表せる値の通り数は、28 です。

28 = 256

つまり、1バイトでは256通りの状態を表せます。

8ビットの並びは、次のように考えられます。

00000000
00000001
00000010
...
11111111

00000000 から 11111111 まで、全部で256通りの組み合わせがあります。

内容
1バイト8ビット
表せる通り数28
結果256通り

ここで大切なのは、1バイトは256通り と丸暗記するだけではないことです。

1バイトは8ビット。
8ビットでは28通り。
28は256通り。

この流れで考えると、2バイトや4バイトも理解しやすくなります。

サイズビット数表せる通り数
1バイト8ビット28 = 256通り
2バイト16ビット216 = 65536通り
4バイト32ビット232通り
8バイト64ビット264通り

Javaの型のサイズを見たときに、「これは何ビットなのか」「何通りの状態を表せるのか」と考えられるようになると、型の理解がかなり深まります。

short型は2バイトなので16ビットで表される

Javaのshort型は、2バイトの整数型です。

1バイトは8ビットなので、2バイトは16ビットです。

2バイト = 16ビット

つまり、short型の値は、コンピュータ内部では16個の0と1を使って表されます。

たとえば、次のようなイメージです。

00000000 00000011

8ビットが2つ並んで、合計16ビットになっています。

サイズビット数
short2バイト16ビット

16ビットで表せる通り数は、216です。

216 = 65536

つまり、short型は16ビットを使って65536通りの状態を表せます。

ここで、short型の範囲とビット数がつながってきます。

short型は、16ビットで表せる65536種類の状態を、整数の範囲に対応させています。

ドラゴンボール風にたとえるなら、short型は 16個の気の粒で作る整数カプセル です。

16個の気の粒の並び方によって、どの整数を表すのかが決まります。

16ビットで65536通りを表せる理由

16ビットで65536通りを表せる理由は、各ビットが0または1の2通りを持つからです。

1ビットなら2通りです。

0
1

2ビットなら、2×2で4通りです。

00
01
10
11

3ビットなら、2×2×2で8通りです。

これを16ビットまで広げると、2を16回かけることになります。

ビット数計算表せる通り数
1ビット212通り
2ビット224通り
3ビット238通り
16ビット21665536通り

ドラゴンボール風に考えるなら、16個の気の粒があり、それぞれ消えているか光っているかを選べます。

1個ごとに2通りの選択があるため、全体では65536通りものパターンになります。

このしくみが分かると、型のサイズが単なる数字ではなく、表せる値の数に直結していることが見えてきます。

2バイトと聞いたら16ビット。
16ビットと聞いたら216通り。
216通りは65536通り。

この流れで考えられると、short型の範囲も理解しやすくなります。

short型では65536種類の値を整数に対応させている

short型では、16ビットで表せる65536種類の状態を、10進数の -32768 から 32767 までの整数に対応させています。

ここで大切なのは、65536通りすべてを0以上の数に使っているわけではないという点です。

short型は、正の数だけでなく、負の数も表します。

そのため、表せる範囲が負の側と正の側に分かれています。

コンピュータ内部の2進数表している10進数
00000000000000000
00000000000000011
00000000000000102
011111111111111132767
1000000000000000-32768
1000000000000001-32767
1111111111111111-1

この表を見ると、2進数の並びと10進数の値が対応していることが分かります。

ドラゴンボール風にたとえるなら、16個の気の粒の並びを、Javaが short型のルール に従って読み取っているイメージです。

同じ0と1の並びでも、どの型のルールで読むかによって意味が決まります。

short型では、16ビットの組み合わせを整数として読むルールがあり、その結果として -32768 から 32767 の範囲が表せるようになっています。

先頭の1ビットは正負と深く関係している

short型のような整数型では、先頭の1ビットが正負と深く関係しています。

学習の入り口では、まず次のイメージで押さえておくと分かりやすいです。

先頭ビットイメージ
0正の数側0111111111111111 は 32767
1負の数側1000000000000000 は -32768

先頭が0のときは、正の数側に対応します。

先頭が1のときは、負の数側に対応します。

ドラゴンボール風にたとえるなら、先頭のビットは 正の方向へ飛ぶか、負の方向へ戻るかを決める方角札 のようなものです。

残りの気の粒が細かい値のパターンを表していても、先頭の札によって全体の意味が正の側か負の側かに分かれます。

もちろん、実際の整数表現にはさらに細かいルールがあります。

ただ、最初は次のように考えると十分です。

基本イメージ内容
先頭が0正の数側
先頭が1負の数側
16ビット全体short型の値を表す

この考え方を知っておくと、なぜshort型の範囲が 0〜65535 ではなく、-32768〜32767 になるのかが理解しやすくなります。

図:short型の内部表現

この図が示していること

この図は、short型が2バイト、つまり16ビットで値を表していることを示しています。

8ビットが1バイトで、それが2つ集まることで16ビットになります。

その16ビットを使って、short型は65536通りの状態を表せます。

この図から分かることは、2バイトというサイズが単なる数字ではないということです。

2バイトは16ビットであり、16個の0と1の組み合わせによって値を表しているという意味です。

この理解があると、short型の範囲が -32768〜32767 になる理由もつかみやすくなります。

型のサイズと値の範囲が関係する理由

型のサイズと値の範囲は、深く関係しています。

型のサイズが大きいということは、使えるビット数が多いということです。

使えるビット数が多いということは、0と1の組み合わせが増えるということです。

組み合わせが増えれば、そのぶん多くの値を表せます。

流れを整理すると、次のようになります。

順番内容
1型のサイズが決まる
2使えるビット数が決まる
30と1の組み合わせ数が決まる
4表せる値の範囲が決まる

ドラゴンボール風に言えば、使える気の粒が多いほど、作れるエネルギーパターンが増えます。

作れるパターンが多ければ、より広い範囲の数を表せます。

Javaの整数型も同じです。

サイズビット数範囲の考え方
byte1バイト8ビット表せる通り数は少なめ
short2バイト16ビットbyteより多く表せる
int4バイト32ビットよく使う広い範囲
long8バイト64ビット非常に広い範囲

byte、short、int、long はどれも整数型です。

しかし、サイズが違うため、使えるビット数が違います。

使えるビット数が違うため、表せる値の範囲も違います。

この関係が分かると、なぜ整数型が複数あるのかも理解しやすくなります。

ビットとバイトを知ると型の表が読みやすくなる

ビットとバイトの知識があると、Javaのデータ型の表がぐっと読みやすくなります。

何も知らない状態で型の表を見ると、short は2バイト、int は4バイト、long は8バイトという情報が、ただの暗記項目に見えるかもしれません。

しかし、次の関係が分かっていると、見え方が変わります。

1バイト = 8ビット
nビット = 2n通り

この2つを押さえておけば、型のサイズに意味があることが分かります。

型の表で見る情報ビットとバイトを知ると分かること
1バイト8ビットで表している
2バイト16ビットで表している
4バイト32ビットで表している
8バイト64ビットで表している
サイズが大きい型より多くの組み合わせを表せる

つまり、ビットとバイトは、型のサイズを理解するための土台です。

型のサイズが分かると、なぜその型で扱える値の範囲が決まっているのかも理解しやすくなります。

ドラゴンボール風に言えば、型の表は戦士の装備表のようなものです。

1バイトの装備は8個の気の粒で動く。
2バイトの装備は16個の気の粒で動く。
4バイトの装備は32個の気の粒で動く。
8バイトの装備は64個の気の粒で動く。

そう考えると、型のサイズがただの数字ではなく、表現できる力の広さを示していることが見えてきます。

図:型のサイズとビット数のつながり

この図が示していること

この図は、Javaの整数型のサイズとビット数の関係を示しています。

byte は1バイトなので8ビット、short は2バイトなので16ビット、int は4バイトなので32ビット、long は8バイトなので64ビットです。

この図から分かることは、型のサイズが大きくなるほど、使えるビット数が増えるということです。

ビット数が増えると、0と1の組み合わせが増えます。

その結果、より広い範囲の値を表せるようになります。

ビットとバイトの理解がJava学習につながる

Javaを学び始めたばかりのころは、変数名や型名に目が向きやすいです。

byte、short、int、long という型名を見て、まず名前を覚えようとするかもしれません。

もちろん名前を覚えることも大切です。

でも、それだけでは少しもったいないです。

その背後では、コンピュータが0と1の組み合わせで値を扱っています。

ビットとバイトを理解すると、型のサイズ、メモリ、値の範囲がつながって見えてきます。

学ぶ内容つながる理解
ビット0または1を表す最小単位
バイト8ビットのまとまり
型のサイズ何ビットで値を表すか
値の範囲何通りの状態を表せるか
short型2バイト、16ビット、65536通り
int型4バイト、32ビットで値を扱う
long型8バイト、64ビットでさらに広い範囲を扱う

ドラゴンボール風にたとえるなら、ビットとバイトは、派手な必殺技ではなく、気の扱い方の基礎です。

目立つ内容ではないかもしれません。

でも、ここを理解しておくと、Javaの型やメモリの話がかなり分かりやすくなります。

byte、short、int、long の違いも、単に名前が違うだけではありません。

使えるビット数が違います。
表せる状態の数が違います。
扱える値の範囲が違います。

この関係が分かると、Javaのデータ型は暗記ではなく、しくみとして理解できるようになります。

ビットとバイトを見る力が型の理解を深める

ビットは、0または1を表す最小単位です。

バイトは、8ビットをまとめた単位です。

1バイトは8ビットなので、2バイトは16ビット、4バイトは32ビット、8バイトは64ビットになります。

そして、nビットでは2n通りの状態を表せます。

この考え方を押さえておくと、Javaの型のサイズが意味を持って見えてきます。

ポイント内容
1ビット0または1
1バイト8ビット
2バイト16ビット
16ビット216 = 65536通り
short型2バイトなので16ビットで値を表す
short型の範囲-32768〜32767

Javaの型を学ぶとき、サイズや範囲の数字がたくさん出てきます。

でも、それらはバラバラの暗記ではありません。

型のサイズが決まる。
使えるビット数が決まる。
0と1の組み合わせ数が決まる。
表せる値の範囲が決まる。

この流れを理解できると、Javaのデータ型がかなり立体的に見えてきます。

ドラゴンボール風に言えば、0と1の気の粒をどれだけ使えるかによって、作れる技の幅が変わります。

少ない気の粒なら小さな技。
多い気の粒なら大きな技。
Javaの型も同じで、使えるビット数が多いほど、より広い範囲の値を表せるようになります。