「先生、2進数って将来役に立つんですか?」
こんにちは、BTI部のマスダです。
唐突な質問ですが、皆さんは「2進数」ってご存知ですか?
情報系初等資格の試験問題にもなっているので情報システム(以下情シス)系の仕事をしていて知らない人はいないかと思いますが、一般的には知らない人も多い※1と思いますので簡単に説明します。
※1 義務教育の指導要綱からずいぶん昔に外れているみたいです。タイトルのような質問をする少年・少女は現実にはいないことでしょう。
ざっくりした定義は
「2になったときに桁上がりするルール(2進法)で表現された数」
です。
日本の日常生活の中で使われている数として直感的に理解しやすいのは10進数ですが、
10進数:2進数の関係を例示すると、次のようになります。
0:0
1:1
2:10
3:11
4:100
ここまで、2進数についてなんとなく理解されたと思いますので本題です。
2進数を実務で使うことはあるのか
ぶっちゃけ中小企業の情シススタッフが意識的に2進数を直接取り扱うことはあまりないかと思います。
ただ、基礎知識としては必要ですし、条件分岐などの論理ゲートを考える際など、無意識に2進法でモノを考えたりはしていると思います。
また、知っていると便利な(変な)使い方があったりします。
情シスとはあまり関係のない仕事ですが、昔わりと直接的に作業で2進数を使った事例を紹介します。
(以下、しばらく記憶をもとにした思考描写のため文末乱れます。)
「面倒くさい」は効率化の母
【お題】
各要素の組み合わせ(並び順は問わない)を網羅し、組み合わせパターンごとにどのような状態か定義せよ。
まずはExcelで要素の組み合わせを、もれなく書き出していく作業を意気込んでやろうとしますが…
「…面倒くさい」
筋力で埋めていくのは3行でギブアップ。
さて、どうするか…暫し黙考。
方向性としては、以下の2つ。
1.馳走をエサに後輩にやってもらう
2.面倒くさいけど自分で何とかする
(当然に)まずは1の方向で進めることを志向。
よくない気配を感じたのか、後輩は突然忙しそうな様相を呈し、全力で話しかけんなオーラを出している。
方針変更。
自分で何とかすることに。
無心。見るともなく表を眺める。
×と〇、〇と×。2値。1と0。
天啓。
…これは2進数を使えばいい感じにできるのでは?
パターンに格納した数値を2進表現したうえで、0を×に1を〇に置き換えるという方向で設計方針は決定。
ただ、Excelで2進数に変換する関数など存在するのか?誰得?という考えが一瞬影を落とす。
猜疑心を抑えつつWebで検索。検索ワードは「Excel 2進数 変換 関数」。
発見。「DEC2BIN」
あるんかい。
検索ワードに「10進数」を含めるのを忘れても、10進数→2進数の変換関数がズバリ出てくる検索エンジンの忖度具合にちょっと感動。
しかも名前が格好いい。デックトゥビン。
Decimal to Binaryの略なのだろうが、略称の響きは完全に洋楽バンド。
併せてジョジョ(5部)に登場した際のスタンド能力について妄想。
興奮と妄想を抑えつつ、説明を一読。
要素数分の桁が固定表示されるように式を調整。
=TEXT(DEC2BIN(セル番地),"00000")
これにて10進数→2進数への変換完了。
次は、各桁の値の取り出しと変換。
MID関数で桁抜きした値をIF分岐で変換。オートフィルで引っ張って完成。さらに楽をするために要素を数値化※2。
=IF(MID($B2,C$1,1)="0","×","〇")
できた。
その後、必要な最大値までパターンNoをつけてオートフィルして完了。
パターンNoをいくつまで振ればいいかは、ビジュアル(固定しない場合の桁数か、0が不自然に増えたタイミング)でわかっちゃいますが、折角なので計算で出します。
桁限界を決めた2進数から10進数の最大値を出すのはとても簡単です。
例示のように5桁の場合、1~5桁に基数2を0~4乗して割り当てたうえで加算すると10進数の最大がわかります。
1桁目:2^0=1
2桁目:2^1=2
3桁目:2^2=4
4桁目:2^3=8
5桁目:2^4=16
合計31が最大値。0を加えてパターン数は32パターンとなります。
上記の方法は試験でよく出る2進数→10進数変換のやり方でオーソドックスなものですが、最大値を出すだけであれば、もっと簡単です。
要素数をnとすると、2^n-1が最大値となります。
・・・なんか中学の授業を思い出したおじさんは切なくなってきたので、この辺りでやめておきます。
と、こんな感じで相当ニッチなシーンとはいえ、実務では使わない知識だと思っていたものが意外と役に立ったという事例を紹介しました。
勉強して無駄なことは(そんなに)ないという結論で今回は強引に締めたいと思います。
※2 ワンショットの作業の場合、実際にはこんな式を組むよりも、0と1のまま値を格納して、後で一括置換した方が全然効率的だったりしますが、作業中は粘土に夢中になる幼児状態なのでそこに気づけないのはしょうがないですね。
●前の記事