こんにちは・・ちちくろです♪
1・2・4・8・16・・・これ何か分かります・・これは2進数の桁です・・。
今から35年くらい前・・まだ現役で仕事をしている頃に・・仕事で頻繁にしていた作業がありまして・・。
それが・・2進数と関係があり・・結構面倒な作業だったのです・・当時はパソコンが普及しておらず・・大量にメモ書きをして作業していたのですが・・。
パソコンが普及すると・・Excelでテンプレートファイルを作り・・作業を効率化しようと思っていたのですが・・仕事の合間に、のんびり作っていたら・・その作業の必要がなくなり・・結局テンプレートファイルを作らなかったことを・・今更ながら思い出し・・。
それじゃ・・一つ作ってみようかと・・。
まぁ・・あまり需要ある内容とは思えないのですが・・もしかして・・。
そう思ってブログに書くことに・・。
目次
面倒な作業
私は現役時代・・とある機器のメンテナンス作業を生業とする会社に勤めていたのですが・・35年位前に面倒な作業が・・。
とある機器というものは・・電子機器で・・プロセッサを使って制御するもの・・当然プログラムが動いていて・・プログラムを実行するためのデータが存在します。
メモリ内のデータを変更することで・・機器の動作が変更できるのですが・・。
データの変更方法が・・機器内のメモリ内容を読み出し・・変更された内容に書き換えるというもの・・。
メモリ内のデータの読みこみは・・16進数・・サービスマニュアルの記載は・・2進数・・。
つまり・・機器の設定の内容を変更するには・・16進数で読み出し・・2進数に読み替え
有効・無効を変更するビットを変更し・・再び16進数に・・。

この16進数と2進数の読み替えが・・とても面倒・・。
2進数
2進数とは・・「0」と「1」のみの数字・・普段なじみのある10進数と比較すると・・10進数は1つの桁の数が0~9なのに対し・・2進数は0と1のみ・・。

コンピュータは・・ONとOFFの2つしかないので・・コンピュータの世界でよく使われます。
2進数の1の桁を・・ビットと呼ばれることも・・。
通常は4ビット単位で使用されるウことが多く・・4ビットで1ニブルといい・・8ビットでは1バイトといいます。
通常コンピュータのデータを格納するメモリやストレージの容量はバイトで記載されます。
で・・この2進数をどうやって16進数に変換するのかを以後に説明・・。
2進数を10進数へ
2進数は一般的に4桁(4ビット)単位で扱われることが多い・・4ビットを1ニブルと呼び・・8ビットを1バイトと呼ばれる。
2進数で表現できる10進数は・・意外と多い・・4ビットで表現できるのは10進数の0~15までで・・8ビットなら0~255まで・・。
10進数に変換するには・・2進数で1が表示されている桁の位をたし算する・・。
- 1桁目の位は1
- 2桁目の位は2
- 3桁目の位は4
- 4桁目の位は8
2進数の【1011】は10進数では【11】になる・・。

2進数の【1011】の場合は8+0+2+1=11となる・・4桁目は【1】なのでたし算するのは【8】を・・3桁目は【0】なのでたし算するのは【0】を・・以下同様に 2桁目は【1】なのでたし算するのは【2】・・1桁目は【1】なのでたし算するのは【1】となります。
10進数を2進数に
それでは逆に10進数を2進数に変換するには・・例として・・10進数【13】を2進数に読み替えるには・・。
桁の数値を引き算できるかどうかでその桁の数値が【1】もしくは【0】に・・。

計算するのは4桁目から・・【13】から4桁目の【8】を引くことが出来るので・・4桁目は【1】に・・引き算した残りは【5】・・。
3桁目は・・残りの【5】から【4】は引けるので・・3桁目は【1】・・引き算の残りは【1】・・。
2桁目は・・【1】から【2】は引くことが出来ないので・・2桁目は【0】・・残って数値は【1】
1桁目は・・残った【1】から【1】を引けるから・・1桁目は【1】となります。
その結果・・10進数の【13】を2進数にすると【1101】ということになります。
16進数
16進数は・・16間隔で桁数が増える数値・・。
基本2桁単位で使用・・1桁は2進数の4ビット・・つまり1ニブルに対応・・通常データは1バイトで表現されるので・・16進数2桁で使用されるのが通常・・。
0~9までは10進数と同じに・・10~15まではアルファベットのA~Fに対応する・・。
つまり16進数は・・【0・1・2・3・4・5・6・7・8・9・A・B・C・D・E・F】ということに・・。
下に10進数と2進数16進数の対比を一覧表に・・。

16進数を10進数に
16進数を10進数にするには・・16進数の0~9は簡単・・10進数でも0~9そのままでOK・・。
10進数の10~15は・・チョット面倒・・。
例えば・・16進数が【C】なら・・【C】はA・B・Cとアルファベット【3】文字目・・この【3】に【9】を足すと・・3+9=12となるので・・10進数では【12】となることに・・。

10進数を16進数に
次は10進数を16進数に読み替える場合・・。
これも・・16進数が0~9なら・・16進数でもそのまま0~9でOK
しかし・・16進数の数値が9以上なら・・9を引いた数値のアルファベットの文字順の文字に・・。
例えば【14】なら・・14から9を引くと・・14-9=5で【5】に・・。
アルファベットの5文字目は A・B・C・D・Eと【E】なので・・16進数は【E】になる・・。

大量のメモ書き
この作業を繰り返していると・・メモ書きが一杯に・・。
作業が1回だけならそれでいいのですが・・何度も繰り返す必要が・・。
作業は・・16進数を読み出し・・16進数から10進数に置き換え・・さらに10進数から2進数に置き換え・・2進数を編集・・必要な部分の数値を1にしたり・・0にしたり・・。
編集した2進数を・・2進数から10進数置き換え・・さらに・・10進数から16進数に置き換える・・その繰り返しに・・。
これは・・頭の中だけで数値を置き換えるのは難しい・・だから大量のメモ書きをすることに・・。
しかも・・作業中に人から話しかけられると・・頭が混乱することに・・。
これ・・Excelで出来ない・・
この作業をExcelでできない・・? そう思って調べてみることに・・。
インターネットで検索すると・・関数で出来ることが分かった・・。
ただ・・Excelのバージョンが古いと・・Excelにアドインの分析ツールをインストールしないと使えない・・私がこのツールを使おうとしていた当時は、Excelバージョンが古かったので・・分析ツールをインストールして作ろうとしていたのですが・・。
今はExcelで、普通に関数で提供されています・・。
どのバージョンから使えるのかは・・忘れてしまいました・・ゴメンナサイ・・。
Excelの関数
Excelで進数に関する記載は。
- 2進数・・・BIN
- 10進数・・DEC
- 16進数・・HEX
これをExcelの関数で使用するのは・・。
【変換前の進数】2【変換後の進数】と書きこむだけでOK
覚えやすいですよね♪

実際に関数を使う場合・・例えば2進数を16進数にしたいのであれば・・
【=BIN2HEX(数値,桁数)】とセルに書き込めばよいことに・・。
桁数は省略することが可能・・桁数を指定する場合は10桁までが可能です。
実例2進数から16進数
実際にExcelの関数を使って進数を置き換えてみることに・・。
例題は2進数を16進数に置き換えてみることに・・。
8桁(ビット)の2進数【10011101】を16進数にするには・・。
使用する関数は・・BIN2HEX・・。
Excel内のセルに【=BIN2HEX(“10011101”,2)】と書き込む・・すると・・セルに【9D】と表示されます。

これが・・合っているか検証・・。
16進数は2進数の4桁に相当するので・・8桁の2進数は4桁ずつに分けて・・。
2進数の【10011101】の前4桁は【1001】・・数値が1になっているのは・・4桁目と1桁目・・。
そこで・・4桁目の位8と1桁目の位1をプラスすると・・10進数の【9】になることに・・。
10進数の【9】は・・16進数でも【9】になる・・。
後ろの4桁は【1101】・・1になっているのが・・4桁目の位8と3桁目の位4・・さらに1桁目の1なので・・8+4+1=13に・・なので10進数の【13】
10進数の【13】を16進数にすると 13-9は4・・アルファベットの4文字目は・・A・B・C・Dなので【D】ということに・・。
結果・・2進数【10011101】を16進数にすると・・【9D】となります・・ということで、あっていることに・・。

実例16進数から2進数
次は16進数から2進数を求めることに・・例題は16進数【A2】を2進数に置き換えてみることに・・。
使用する関数は・・HEX2BIN・・Excelのセルに【=HEX2BIN(“A2”,8)】と書き込むと・・【10100010】と表示される・・。

これもあっているか検証・・。
16進数の【A】は・・10進数では【10】・・【A】はアルファベットの1文字目なので・・1+9=10なので16進数の【A】は10進数では【10】ということに・・。
10進数の【10】は2進数では・・10から8を引くことが出来るので4桁目は1で残りは2・・。
2から4は引けず・・2は引けるので3桁目は0・・2桁目は1になります。
残りは0なので1桁目は0・・
結果・・16進数の【A】は・・2進数では【1010】になります。
16進数の【2】は・・10進数でも【2】・・2進数だと【0010】に ・・。
2から4桁目の8と3桁目の4を引くことが出来ないので・・4桁目と3桁目は0に・・。
残った2から2は引けるので2桁目は1・・残りは0なので1桁目の1は引けないので1桁目は0になります。
結果・・16進数の【A2】を2進数に置き換えると【10100010】であっていることになりますね。

まとめ
2進数・10進数・16進数それぞれに進数を変換するのは・・結構面倒な作業・・。
そこでExcelの関数を使えば楽ちんに作業が出来る・・♪
Excelの進数に関する表記は
- 2進数・・・BIN
- 10進数・・DEC
- 16進数・・HEX
この3つを【2】で区切ればOK
しかし・・いちいちセルに数式を書き込むのは・・やっぱり面倒なので・・。
テンプレートファイルを作ればよいかと・・。
次回でテンプレートファイルを作ってみようかと・・。