ITエンジニアなら知っておきたい2進数の数え方|8ビット256と画像処理の話

電気・制御
電気・制御
記事内に広告が含まれています。
この記事でわかること
  • なぜ色は256諧調なのか
  • 2進数が何に使われているか
  • 「2進数の数え方」1248(いち・にー・よん・ぱー)で数えるコツ
  • 画像処理で「1画素8ビット」「グレースケール256階調」と言われる理由

なぜ色は256諧調なのか

まず、ここを疑問に思う方が多いでしょう。

答えは2つです。(疑問に思うことが人により、おそらく2つに分かれるから)

① 人が識別できる諧調が256までだから(といわれている)

なぜもっと段階があってもいい、または少なくてもいいはずなのに256なのか。。。。。

これはいろいろ調べた結果、これが一番有力です。どれだけ色に敏感な人、プロだとしても256まで、、、という説があります。

② 8ビットを10進数で表すと256で扱いやすいから

はい、これは制御、特にPLCやマイコン制御や言語より手前のプログラムを扱ったことがある人ならピンとくるはず。

そうなんです。2進数を扱うとき、10進数一桁を表すのに4ビット必要ですよね?

でも数えていくと分かると思います。

え、4ビットを10進数の「9」までしか扱わないとすると、もっと数えれるのに勿体なくない????

こう考えれたあなた!!!!!正解!!!

じゃあ、「それ以上数えたいときにどうしよう」となって編み出された進数・・・・・

それが16進数です。数え方はこうです

0、1,2,3,4,5,6,7,8,9、A、B、C、D、E、F

はい、で先ほど話した様々な機器で8ビット、16ビットが使用されます。

よって扱いやすさから8ビットで考えて16進数で「FF」、10進数で「256」となっています。

2進数はなぜそんなに大事なのか

多くのITエンジニア、制御エンジニアにとって、
2進数は「数学の豆知識」ではなく、仕事の前提知識です。

  • メモリ容量
  • フラグ管理
  • ビット演算
  • 画像処理
  • 通信プロトコル
  • PLCやマイコンのI/O

こういったものは、全部ビットと2進数の世界で動いています。

いろんなプログラムをサブルーチンで使い、読み出し、動かす、、、
それをスムーズにするには2進数の知識が必要になります。

にもかかわらず、

  • 「2進数はなんとなく避けてきた…」
  • 「0と1がズラッと並ぶと、もう読む気がしない…」

という人も多いはずです。というかそんなことは知らないよって人も多いかも。。。。

この記事では、そういう人向けに、

  • 2進数の数え方を感覚でつかめるコツ
  • 「8ビット=256通り」というルールのイメージ
  • それが画像処理や制御の世界でどう生きているか

を、できるだけ噛み砕いて解説していきます。

まずはおさらい?:2進数と10進数の違い

最初に、10進数との違いだけサクッと整理しておきます。

10進数(普段の我々が使う数字)

・使う数字:0〜9
・桁が一つ上がると「×10」
 例:123 = 「1×100」 +「 2×10」 + 「3×1」

10進数の考え方は、桁が一つ上がるとまた「0」から始まり「9」で終わるということです!!

一つの桁に対し10個の数字を扱うから10進数と言います。

決して1~10が一般的だから10進数みたいな感覚で覚えてはだめです。「0」を忘れちゃダメ。

一桁で扱える数字は「0」~「9」の10個の数字です!!

2進数(コンピュータの数字)

・使う数字:0と1だけ
・桁が一つ上がると「×2」
 例:1011(2進数) = 1×8 + 0×4 + 1×2 + 1×1 = 11(10進数)

この「桁ごとの重み」がポイントです。←はい?って思いました?

突然、意味わからなくなりましたって人。

もう少し分かりやすく、かみ砕いて言うと

10進数の4桁=1000

2進数の4桁=1000

一見同じ数字に見えますが、全く違います。

2進数の4桁=1000 は 10進数の8 なんです!!

それはなぜか、2進数は一桁で扱える数字が「0」と「1」の2個しかありません。

これを順番に数えていくと「8」になります。

ここから、今回の主役である
「1248(いち・にー・よん・ぱー)」 が登場します。

「1248(いち・にー・よん・ぱー)」で2進数を簡単に数えるコツ

「2進数苦手なんだけど…」という人向けに、
簡単な練習方法を挙げておきます。

2進数の桁の重みを、低い方から並べるとこうなります。

1, 2, 4, 8, 16, 32, 64, 128, …

この最初の4つが

  • 1
  • 2
  • 4
  • 8

です。
これをリズムで覚えてしまいます。

「1248(いち・にー・よん・ぱー)」

この4つを完璧に押さえておくだけで、
2進数の最初の一歩がぐっと楽になります。

①まずは1248(いち・にー・よん・ぱー)を完璧にする

  • 1, 2, 4, 8 の4つを
    「いち・にー・よん・ぱー」とリズムで覚える(右から2倍づつ)
  • 4ビットの2進数(0000〜1111)を見て、
    頭の中で10進数に直す練習をする

これができるようになるだけで、
2進数アレルギーはかなり軽減されます。

練習)2進数「1010」を10進数で表現すると?

 答え)8+2=10 簡単すぎる!!!

②8ビットの重みもついでにセットで覚える

8ビットなら、

  • 1
  • 2
  • 4
  • 8
  • 16
  • 32
  • 64
  • 128

と並びます。

特に、128, 64, 32, 16 あたりの重みは、
画像処理や制御ロジックのデバッグでよく出てくるので、
「なんとなく」でも頭に入れておくと、とても楽になります。

じゃあ8ビットを10進数で表現するとどうなるか?

128+64+32+16+8+4+2+1=255

あれ?255って聞き覚えないですか??

そうなんです。色の諧調は0~255の256諧調で表すんです。つまり、グレー画像なら1画素8bitなんです!!!

なぜ256諧調か、、、、、これは人の目で識別できる限界が256諧調とどこかで拝見しました。(ほんとか?)

8ビット=256通りというルールを体で覚える

さて、ここから「8ビット256の世界」の話に入ります。

ビット数と、表現できるパターンの数には、
こんな関係があります。

  • 1ビット → 2通り(0 / 1)
  • 2ビット → 4通り(00 / 01 / 10 / 11)
  • 3ビット → 8通り
  • 8ビット → 256通り

一般的には

nビットで表現できるパターン数 = 2ⁿ通り

です。

つまり、8ビットなら

2⁸ = 256通り

になります。

これが、画像処理やマイコン、通信などでよく出てくる

  • 「0〜255」
  • 「8ビット=256」
  • 「1バイト=8ビット」

といった数字の正体です。

ここはもう「理屈」よりも

・8ビット → 256通り
・値の範囲は → 0〜255

このセットを体で覚えてしまうのが近道です。

画像処理の世界:1画素8ビット=グレースケール256階調

ここから、実際の応用例に入ります。

画像処理の本や仕様書などを見ると、
よくこんな記述があります。

「1画素はグレースケールで8ビット」

これはつまり、

  • 1つの画素(ピクセル)の明るさを
  • 8ビットの2進数で表現している

という意味です。

8ビット → 256通りなので、
諧調(明るさの段階)は256階調になります。

  • 0 → 完全な黒
  • 255 → 完全な白
  • 間の値 → グレーの濃さが徐々に変わる

例えば、画像処理装置やライブラリで

  • 0〜255の整数で画素の値を見る
  • ヒストグラムが0〜255の横軸で表示されている

こういったものは全部、
「1画素8ビット」の発想に基づいています。

カラー画像はRGBで3倍の情報量(8ビット×3=24ビット)

グレースケールは「明るさ1チャンネル」でしたが、
カラー画像になると話が少しだけ広がります。

カラー画像は基本的に、

  • R(Red=赤)
  • G(Green=緑)
  • B(Blue=青)

の3つの成分で色を表現しています。
これがいわゆる RGB です。

そして、一般的なカラー画像では、

  • Rが8ビット(0〜255)
  • Gが8ビット(0〜255)
  • Bが8ビット(0〜255)

のように、各チャンネルが8ビットで表現されています。

つまり、

  • 1画素あたりのビット数は → 8ビット × 3 = 24ビット
  • 表現できる色のパターン数は → 256³ ≒ 約1677万色

という、とんでもない数になります。

ここで活きているのが、最初の

「8ビット → 256通り」

というルールです。

グレースケールのときは「256段階の明るさ」だったものが、
RGBカラーになると「256段階の赤 × 緑 × 青」の組み合わせになる。

そのベースにあるのは、全部2進数と8ビットなんですよね。

制御エンジニア・組込みの現場で使われる8ビット思考

ITエンジニアだけでなく、
制御エンジニアや組込みエンジニアの世界でも、8ビット・2進数は日常です。

①入出力(I/O)とビットフラグ

PLCやマイコンの世界では、

  • 8点入力
  • 8点出力
  • 16点入力
  • 16点出力

といったI/Oが、ビット単位で管理されています。

例えば、8点入力が1バイト(8ビット)に対応している場合、

  • ビット0 → センサ1
  • ビット1 → センサ2
  • ビット7 → センサ8

というように、
1バイトの中のどのビットが1か0かを見て制御する、という使われ方をします。

このとき、

  • 2進数の桁の重み
  • ビットマスク(0x01, 0x02, 0x04, 0x08…)

がスッと頭に入っていれば、
制御ロジックの読み書きが圧倒的に楽になります。

②レジスタやフラグ管理

組込みソフトやファームウェアでは、

  • ステータスフラグ
  • エラーフラグ
  • モード設定ビット

などを、1バイトや2バイトの中にフラグとして詰め込むことがよくあります。

ここでも、

  • 「このビットが立っていたらエラー」
  • 「このビットとこのビットの組み合わせでモード表現」

といったロジックを組むのに、
2進数とビットの感覚が必須になります。

③日常の中で「0〜255」を意識してみる

  • 画像の明るさ → 0〜255
  • 音量やゲインの内部表現
  • カラーコード(RGB)

などを見たときに、

「これは8ビット256の世界だな」と意識してみると、
2進数と実務の距離感がグッと縮まります。

まとめ:2進数が分かるとデジタルの見え方が変わる

最後に、ポイントを整理しておきます。

・2進数は ITエンジニア・制御エンジニアにとっての“母国語”のようなもの
1248(いち・にー・よん・ぱー)で覚えると数え方が一気に楽になる
・8ビットで表現できるのは 2⁸ = 256通り → 値は0〜255
・画像処理では1画素=グレースケール8ビット → 256階調 が基本
・カラー画像は RGBの3チャンネル(8ビット×3) で、約1677万色を表現

2進数や8ビットの話は、一見地味ですが、
一度イメージでつながると、仕事で見えてくる情報量が一気に増えます。

「なんとなく苦手だから避ける」から、
「1248でサクッと読める」に変わるだけで、
エンジニアとしての視界はかなりクリアになります。

この記事をきっかけに、
ぜひ “8ビット256の世界” を自分の中にインストールしてみてください。

次は1ビットが電気と結びついた話をしていきたいと思います。では👋

この記事へのコメント