Lesson4は・・・
ちょっとした知識をご紹介。Lesson1~3で疲れた頭に休憩がてら聞いて下さいね。とは言っても知らないと困ると思うので覚えよう!せめてこの場所に来たら説明がある事くらいは覚えよう。
2進数
言葉は有名でもパッと説明できる人は少ないかな。たとえばあなたは片手でいくつまで数えられる・・・?kimiは0から31まで数えられるよっ!両手なら0から1023までOKだけど頭がまわらないので無理・・・もしかしたら君なら練習すれば可能だっ!!
そう、2進数を知れば常識が少し変わるんだ。すごいでしょ?まず右手をグーにして各爪が横に並ぶように見える状態にしてね。その状態を0としよう。そしたら親指を立てて親指側を1に決めよう。ちょっとシブく「右はあっちだ」ってな格好だね。
まぁ、ここまでは普通だね。じゃ次、人差し指だけ立ててホジッた鼻くそを見るような状態にしてね。それが2なんだ。一本でも2なんだよ。では調子に乗って次のポーズ、目の前に嫌いなあいつを思い浮かべながら中指を立ててね。それは死を意味する・・・いゃ、四だった。
え、怖い?ごめんなさい。次はちょっと痛いけれどハチに刺されたところに薬指で薬をぬる事を想定してね。薬指だけ立ってるかな?それは8なんだ。
最後、小指をだけ立てて16歳高1の夏に好きだったあの子を思い浮かべてね。「15歳だったわっ!」て?そんなあなたは夏のイロイロな出来事を思い出してね。「何で高1の夏?」・・・なんとなくです・・・。本題に戻ると、それが16を表すんだ。
気付いたかな?1+2+4+8+16=31だね。5本の組み合わせで、0とあわせて32種類も表せるんだ!2進数は桁が上がると隣の2倍の数を表すんだよ。
普通は指が折れた状態を0、立った状態を1とする。例えば10進数の「5」なら2進数で「101」となるんだ。101回目のプロポーズは実は五回目かも知れないね。そのほうがとっても現実的な数だよね。手の話にもどって、片手で2進数だと00000~11111までの数を表せることができるから、それは10進数では0~31ってことだ。
「そんなのプログラミングと関係ないじゃん!」って?それはどうかな。この先間違いなく2進数や16進数を使うことが出てくると思うよ。8進数とかもね。
「えぇ、2進数でも良くわからないのに8や16ってなんなの・・・」というあなた、要領は一緒。2進数、10進数がそれぞれ2種類(0と1)、10種類(0~9)の文字で表されるのは気付いてもらえたかな?だから8進数は8種類(0~7)、16進数は16種類(0~9とA~F)を使い切ると桁が上がるんだ。
bitやbyte?
bitやbyteって聞いたことあるかな?これはパソコンの中で使う単位で、実はパソコン内には「0と1」しかなくて、「0と1」しか扱えないんだ。1bitが指1本とするならば、1byteはあらかた手1つということでいいかな。容量1Tbyteのハードディスクには手が1T個入ってるって事だね。500M人があのスペースで一生懸命指を立てたり折ったりしてるんだ。で、覚えて欲しい大切なことはパソコンの手には8本指があるってこと。8bit=1byteなんだ。
参考までに、T(テラ)とは単位の接頭辞でM(メガ)の1000倍、Mはk(キロ)の1000倍、kは1000倍。よくパソコン関係の計算は1kbyteを1024byteとして計算している。それは10進数の世界で1000が計算しやすいだけで、2進数の世界ではキリが悪いから。10進数の1000倍を2進数であらわすと「1111101000倍」で気分悪いでしょ?だから便利なように一桁増やして「10000000000倍」として計算しやすいようにしているんだ。これは210で人にとっても覚えやすいよね。でもね、単位の決まりで接頭辞は十の何乗倍って国際規格で決まっているから本当は間違いなんだよ。「絶対せんにじゅうよんっ!そんなことも知らないのかっ!!」と威張っているヤツほど何も知らない人なんだね。やんわりとこのページを教えてあげてね。
ちなみに一般的にbitは小文字でb、byteは大文字でBと書くのが習慣なんだ。また、通信速度などの処理速度の話はb(bit)、記憶容量の話はB(byte)ってのも決まってるね。
1byte文字と2byte文字?
「そもそも文字ってどうやって表示するの?」ってことだけど、パソコンは2進数の数字しか記憶できないからそれに対応した文字画像を表示するんだ。しかもその画像だって2進数の塊で、画面に表示するときにやっと文字に見えるだけで、パソコンにとっちゃ絵も文字も関係ない。
英語だと256種類で十分収まるから、昔は容量が少なかったし1byteで収まるアルファベットと数字と特殊文字しか使っていなかった。でもそりゃダメだ、日本語はどうする!中国語は?となって2byteで一文字を表す規格を作ったんだ。これなら65536種類の文字が表せられるからね。
でも問題ができてしまった。それは色んな規格ができてしまった上に、さらにそれが色んな国で起こって収集が付かなくなってしまったんだ。それが文字化けってやつで2進数と文字の組み合わせが違うからおこる。だから、文字と2進数の対応表を文字コード表と言うんだけど、表示側が書いた側のコードを指定してやらないといけなくなった。コード表を持っていなけりゃ文が読めないって事だね。
で、こりゃいかんと・・・せっかく65536種類も入れる場所を持っているんだから各国の文字を詰め込んでみようってことでUnicodeが出来た。だから、みんながUnicodeを使えば国を超えてかなりの確立で文字化けを防げるんだ。ま、Unicode自体が数種類あるんだけど・・・そこまで問題にはならない。
表示できない文字?
「世の中見えるものが全てではない。」
kimiの講座でも良く出てくる¥nくんは改行を表す文字って覚えているかな?プログラムで文字を表示する際に普段書きようのない文字も書かないといけない。改行だって普段は見えていなくても気にしないけど、無いと全部一行の文になってしまう。他にも文の終わりって文字をつけてあげないとパソコン君はエンドレスで表示してしまう。
パソコン君は「記憶媒体のここからここまでの2進数の塊をこうやって表示(処理)してね」といわれたことをするだけだから、終わりが無ければどんなデータでもひたすら2進数を文字に対応させて表示しようとする。それが音楽や画像として処理するはずのデータでもね。そうなったら文字化けどころではないね。
話が微妙にずれたけれど、じゃあそんなへんてこりんな文字はどうやって表記するの?って問題を解決するのがエスケープシーケンスといって¥に続いて表記する方法だ。
講座にもたまに出てくる文の終わりは¥0で、その他にもタブは¥tなどがある。ちなみにOSによって改行表記が違うんだ。普段は¥nで大丈夫だけどWindowsは¥rもおまけで引っ付いてくる。気にしないといけない場面に出くわすかも知れないから頭の片隅にしまっておいて。
「エスケープシーケンスって?」とgoogleさんにでも聞いたらすぐ教えてくれると思うし、要るものはそのときに講座で紹介するからその他大勢は省略するね。
バイナリ?
「全てはバイナリデータだ。」
これじゃちょっと反感買うか・・・一般的にテキストデータとそれ以外に分けたら「それ以外」がバイナリデータ。ただ「それ以外」の呼び方を作っただけって感じかな。
どうしてかと言うとプログラムでデータを扱う時に、普通に開いたり書き込んだりするとテキストモードで扱うんだ。テキストモードはテキストに特化していて、さっきも述べた改行文字とかも¥nだけで済むようにとか自動で考えて処理してくれる。だから、書き込もうとしたときにテキストモードだとデータが少し変わる。
で、そんなのいやだ!ってときはバイナリモードで扱えば解消できる。これなら画像だろうが音楽だろうが処理した通りに保存する。知識さえあればどんなデータだって編集したり作ったりできるんだ。
もちろんテキストデータをバイナリモードで開けるし、編集した通りに保存できるよ。
Lesson4はどうだったかな?たまにはこんなLessonもいいでしょ?ではまた次回までさようなら。