プログラミングをしていると時々「16進数」という言葉を目にします。コンピューターと16進数は切っても切れない存在です。そこで、今回は、16進数や2進数について考察し、一覧表示ツールを作ってみましょう。また、後半では、2018年のなでしこがどうなっていくのか、なでしこのコミュニティを牽引するEZNavi.netさんへのインタビューもお届けします。
16進数とは?
私たちは普段からいろいろな数字に囲まれて暮らしています。それで、果物の重さやお金を数えたりするのに、10進数で表された数字を利用しています。「10進数」とは、数を数えるとき、0,1,2,3,4,5,6,7,8,9,10,11,12...と数えていく方法です。つまり、10進数を一言で言うなら、0から9までの10種類の数字を利用して数値を表す表現形式と言えます。
これに対して、IT分野で利用される「16進数」というのは、0から9までとAからFまでの16種類の数字を利用して数値を表す表現形式です。どういうことかと言うと、0,1,2,...,8,9,A,B,C,D,E,F,10,11,12...と数えていきます。つまり、10進数では9の後が10ですが、16進数では9の後がAであり、Fの後が10となるのです。
とは言え、ちょっと分かりづらいと思う方もいるかもしれません。しかし、私たちは、意外と普段の生活で10進数以外の数値表現形を利用しています。例えば、時間を数えるとき、12進数や60進数をつかっています。デジタル時計の分表示は60分ごとに0に戻り、時を1つ繰り上げます。そして、時は12時間ごとに0に戻り、日付を繰り上げるという具合です。16進数も、0からFまで数えたら、桁を繰り上げるという点で同じです。
なでしこで16進数を表示しよう
16進数について理解を深めるために、10進数と16進数を並べて一覧で表示させてみましょう。0から255までの値について表示してみます。なでしこの簡易エディタに以下のプログラムを記入しましょう。
「| 10進数 | 16進数 |」を表示。
「|--------+--------|」を表示。
Nを0から255まで繰り返す
D=LEFT(N & " ", 6)
H=大文字変換(ゼロ埋め(HEX(N), 2))
「| {D} | 0x{H} |」を表示。
ここまで。
そして、実行ボタンをクリックすると、以下のように表示されます。10進数と16進数を区別するために、16進数の数値には、0x30とか0x5Fなど、「0x」をつけますので、この表でも16進数に「0x」をつけて表示しています。
プログラムを見てみましょう。なでしこで10進数の数値を16進数に変換するときには、『HEX』関数を使います。このプログラムでは、「繰り返す」構文を利用して、0から255までの数値を繰り返し、16進数に変換して出力します。その際、表が崩れないように、スペース(空白文字)や「0」の文字で幅を埋めてを出力します。左からN文字を取り出す『LEFT』関数や、任意の桁の「0」で数値を埋める『ゼロ埋め』命令を利用して、幅を合わせています。
どうしてコンピューターで16進数を使うの?
それで、どうしてコンピューターで16進数なんてものが使われるのでしょうか。そもそも、コンピューターは、0と1で動いています。これは、コンピューターの中で、電流が流れている状態をオン(1)、流れていない状態をオフ(0)として情報を扱っていることを意味しています。つまり、コンピューターでは、0と1の羅列によって情報処理をしています。それで、コンピューターでは、0と1だけで数値など様々なデータを扱わなくてはなりません。いったい、0と1だけでどのように数値を表現できるでしょうか。
そこで登場するのが『2進数』です。2進数とは、0と1の二種類で数値を表す方法です。2進数では、0,10,11,100,101,110,111...と数値を表現します。10進数の7が2進数の111となり、10進数の10は2進数で1010となります。
なでしこで2進数を表示してみよう
それでは、もう少し具体的に2進数について知るために、10進数、16進数、2進数と三つの値を並べて表示するプログラムを作ってみましょう。残念ながら、現行のなでしこv3には、値を2進数に変換する機能はありません。そこで、2進数に変換する関数を作ってみました。
●(Vを)二進数変換処理
B=1
結果=0
(V > 0)の間
結果=結果+((V%2)×B)
V=INT(V÷2)
B=B×10
ここまで。
結果を8でゼロ埋めして戻る
ここまで
# 表を作る
「| 10進数 | 16進数 | 2進数 |」を表示
Nを0から255まで繰り返す
NO=HEX(N)を2でゼロ埋め
VV=LEFT(N & " ", 4)
BIN=Nを二進数変換処理
「| {VV} | 0x{NO} | {BIN} |」を表示
ここまで
プログラムをなでしこで実行してみましょう。以下のように表示されます。
2進数と16進数のまとめ
この表を見ると分かりますが、10進数の10は、2進数で「1010」となります。非常にキリが悪いですね。そこで、2進数では「0000」から「1111」までを一区切りとして考えるようになりました。2進数の「1111」とは、10進数の15、16進数の0xFです。こうして見比べると、2進数を扱うのに、10進数より16進数の方が、分かりやすく感じませんか?それで、コンピューターでは、16進数を使う機会が多いのです。前回紹介した文字コード表の作成においても、基本的に16進数が利用されていました。
今回は、16進数や2進数の一覧表を表示するプログラムを作ってみました。実際に、プログラムを動かして、理解を深めていきましょう。そうするなら、ちょっとコンピューターの気持ちが分かった気になるでしょう。
なでしこユーザー「EZNavi.net」さんへのインタビュー
さて、なでしこのWebサイトを見ていると、頻繁に「EZNavi.net」というキーワードを見かけることでしょう。これは、Webサイトのようにも見えますが、個人のハンドル名(ネット上のペンネーム)です。EZNavi.netこと、望月まさとさんは、なでしこのWebサイトで質問できる「質問掲示板」や、プログラムを投稿できる「アプリ掲示板」などを運営してくださっています。また、展示会の出展などのコミュニティ活動を牽引してくださっています。インタビューしてみます。
・クジラ飛行机(以下、ク):EZNavi.netさんは普段どんなお仕事をされているんでしょうか。
・EZNavi.net(以下、E):車やスマホなどの精密部品を作る企業で働いています。仕事でプログラミングをしているのかとよく聞かれますがまったく無く、力仕事が多い仕事です。
・ク:掲示板やエディタなど開発してくださっているので、それは意外ですね。ところで、EZNavi.netさんは、積極的に開発やコミュニティ活動に協力してくださってますが、何がモチベーションになってますか?
・E:私にとって、アイデアがモチベーションです。クジラ飛行机さんからアイデアを頂くこともありますが、オープンソースカンファレンスなど、なでしこの展示会でユーザーさんから直接頂いたアイデアも相当反映しています。
・ク:例えば、どんなアイデアですか?
・E:以前よりユーザーさんから「掲示板をスマホ対応にしてほしい」という多くの意見もありましたが、「会社で確認するのでサイトは派手じゃないようにしてほしい」といったちょっと面白いアイデアを頂くことがありました。そこで作ったのが、最近公開したスマホ対応の質問掲示板、アプリ掲示板だったりします。
・ク:確かに、それは盲点でしたね。
・E:小さいアイデアであっても、クジラ飛行机さんや私にとっては大事なことだったりするかもしれません。
・ク:確かに。小さなアイデアでも、実現できたときの達成感は大きなものですよね。
・ク:ところで、ずばり、なでしこの魅力は何でしょうか?
・E:クジラ飛行机さんの人柄があるのかもしれませんが(笑)、なでしこの魅力は柔軟&寛容さがある所です。
・ク:柔軟と寛容とは、ユニークな着眼点ですね。具体的には、どんな点ですか?
・E:なでしこは、生活にも仕事にも使えます。その上、なでしこ3ではスマホ対応、教育などでも使えるように進めており柔軟な環境、世の中にも対応していると感じています。どんな方にもプログラミングを体感してほしいというスタンスであり、寛容さが唯一無二であり、自分が支えたいと思っている理由の一つでもありますね。
・ク:主開発者の私が聞くのも変かもしれませんが、来年の「なでしこ」はどうなると思いますか?
・E:やはり、なでしこ3が飛躍できる年になるのではないでしょうか。「スマホでも気軽に動かせる」というのは将来に向けたキーワードだと思っています。タブレットをメインに使ったプログラミング教育は、Scratchを利用したものなど、広がってきています。
・ク:Scratchはブロックを組み合わせてプログラミングできるツールですね。タブレットでも動くので、教育用途で活用されていますね。
・E:はい。実は、中学生で8割、高校生は9割以上持っているといわれているスマホですが、シニア世代も5割近くの人が持っているんですよ。自宅でスマホさえあれば、プログラミングの勉強ができて、アプリの開発ができるようになるというのは重要です。私も、なでしこ3が最も生活に身近な言語だと思いますので、これをPRしていきたいですね。
・ク:そうですね。今回は、インタビューに応じてくださり、ありがとうございました。今年も共に、なでしこを盛り上げていきましょう!