プログラムとは(より大きな数の扱い方)




皆さんこんにちは、プロクラスの野間です。
今回もコンピュータの根幹の話を続けていきたいと思います。
前回はコンピュータがどうやって数値を理解しているかのお話をしました。
今回はもう少し、踏み込んで、より大きな数の扱い方を紹介します。
この考え方は「メモリ」の使い方の基本になります。

■履歴
1回:プログラムとは(コンピュータが数値を理解する方法)

■登場人物
先生
太郎
花子

■大きな数の扱い方
花子:251、252、253
太郎:何の数を数えているの?
花子:う~ん・・・前に先生がコンピュータは0~255までの数を数えられるって言ってたじゃない?
太郎:う?え~っと・・・確か1Byteで表現できる数値の範囲って話だっけ?
花子:そうそう
太郎:それがどうかしたの?
花子:でも数ってもっと大きな数を使ってるじゃない?お小遣いとか255円だとかなり悲しいわ・・・
太郎:ま・・・まぁそうだけど
花子:私たちの周りではもっと大きな数を使っているのにコンピュータでは255までの値しか使えないってのはどうなっているのかと思って、色々考えてたの。
太郎:なるほど?
先生:もっと大きな数値を扱いたいってことですね?
太郎花子:こんちちは!
先生:はい、こんにちは
花子:そうなの!どう考えても255では表現できないと思うの!
先生:なるほどなるほど、でも二人ともその答えは知っているはずですよ?
太郎:え?
花子:そうなの?
先生:はい
花子:あ、待って!考えてみたい!
太郎:えっと確か、2進数で覚えるんだったよね?
花子:そうそう、で、8ビット=1Byteでこれが0~255と。
太郎:となると8ビット以上に増やす方法があるって事?
花子:でもそれだと「知っている」にはならないわよね?
太郎:そんな方法知らないもんね?
花子:となると別の方法よね・・・
太郎:255以上の数を扱う方法・・・
花子:もっと沢山の数よね~?
先生:考え方のイメージを「大きな数」から離れた方が良さそうですね
花子:え?でも、もっと大きな数を扱う方法なのよね?
先生:そうですね、でもその考え方だと少し話が飛んでるんですよね
太郎:話が飛ぶ?
花子:ピヨ~ン
太郎:なにそれ・・・(笑
先生:ちょっと、直感的じゃないんですよね。
花子:う~ん、良くわからないけど、考え方を変えろってことよね
太郎:変えるといってもどんな風に?
先生:考え方としては、まず最初にちょっとずつ考える方がよいですね
花子:ちょっと?
先生:はい、「1,2,3,沢山」ではない方が良いです、
太郎:254,255,大きな数 と考えない方が良いって事ですね
先生:はい
花子:って事は254,255,256,257と考えた方が答えに近いって事?
先生:そうですね
太郎:何が違うんだろう?
花子:同じ・・・じゃないんでしょうねぇ・・・
太郎:違いを考えると、254,255の次に・・・300とかを考えちゃダメって事でしょうか?
花子:確かにそれだと数が飛んじゃってるわね。って事は256の表現方法を考えろって事かしら?
太郎:256の表現方法って・・・256以外に何かある?
花子:既にやってるって事だから、2進数で考えるって事かしら?
太郎:2進数で255を考えると、8ビットだから1が8つだから、11111111だよね?
花子:そこからさらに増えるから9ビット必要になっちゃうのよね?100000000よね?
太郎:でもそれだと1Byteを超えちゃうから駄目だよね?
花子:あ!それよ!
太郎:どれよ?
花子:・・・
太郎:コホン・・・どれ?
花子:1Byteを「超える」よ!
太郎:超える?
花子:そう!桁の繰り上がりよ!今までの、1の次が10って桁が繰り上がってたじゃない!
太郎:そうか、表現しきれなくなったら桁が繰り上がって次の桁になれば良いのか!
花子:そうそう!数値と数字よ!だから255の次は1,255って事よ!
太郎:それだと111111111になっちゃうよ、1,0だね
花子:そうそう!先生どう?
先生:すばらしい!正解です!
太郎花子:やった!
先生:考え方は正にその通りです。桁と考えて繰り上がってしまえば良いわけです。
花子:って事は、メモリが続く限り桁が増やせるのね!
先生:理論上は可能なのですが、現実はそこまで自由じゃありません。
太郎:そうなんですか?
先生:はい、技術的に、そして、お値段的に無理っぽいですね。
太郎:それでも255,255まで表現できたら、え~っと・・・
花子:沢山よ!
先生:笑
太郎:まだ実用的じゃない感じがしてきました・・・
先生:そうですね、それでもまだ65535なので心もとないですね。
太郎:実際はどのくらいまで行けているんですか?
先生:良く使われているのが、4,294,967,295 なので、だいたい40億ですね
太郎:おおお!
先生:実際に使えるのが18,446,744,073,709,551,615なので18京ですね。
花子:沢山ね!
先生:それ以上はコンピュータの根本機能では扱いきれないので、自力で計算する必要があります。
太郎:自力でやったら出来るって事なんですね。
花子:すごいわね!・・・自力?
先生:自分で計算プログラムを作るってことです。でもまぁ、40億の時点でそれを超えるのは結構特殊な状況で、それを超える場合の18京で多くの場合は事足りますので、これで不足するのは更に特殊な職種の場合なので気にしなくても大丈夫ですね。
花子:ビットがあって、バイトがあって、次は?
太郎:次?
花子:ビットが2進数で、バイトが256進数なんでしょ?次は40億?進数の名前
先生:なるほど、少しビット、バイトとは意味が異なりますが、呼び名としては2バイトでワード、4バイトでダブルワード、8バイトはまだ安定した呼び方はないようですがクワッドワードやロングワード等と呼ばれているようです。それ以上は・・・ちょっとわからないです。
太郎:でも、クワッドワード以上の計算を自分で作るって、どこに覚えるんですか?クワッドワード以上はないんですよね?
先生:なるほど、なるほど、今日は二人とも踏み込んできますね。
太郎花子:♪
先生:実は専用の覚えるパーツもあるのですが、基本的に全てメモリに覚えます。
太郎:1024じゃなく1000計算の・・・
花子:ダメだって!
先生:前回の話で例を出したのは補助記憶装置と呼ばれるものです。「ストレージ」と呼ばれることが多いですが、今回のお話では主記憶装置で「メモリ」です。
花子:聞いたことがある!
先生:このメモリは通常全て一列に並んでいて、順に番号がついています、0,1,2,3・・・と
太郎:0?
先生:はい、0も立派な「数」で、コンピュータでは0から使われているものがほとんどです。
花子:へ~
太郎:でも一列に並べて番号がついているって、メモリってバイトに直すとすごく多いですよね?それ全部に番号がついているんですか?
先生:はい、すべて順番についていて、その番号だけで場所が特定できるようになっているんです。


花子:なるほど~
先生:そして、使うときは順番に並んでいる0~3でダブルワードとして使う。みたいな使い方になります。
太郎:なるほど、桁が溢れたら次、溢れたら次って使っていくんですね
先生:考え方は合っているんですが、実際の使われ方は少し微妙なんです。エンディアンの考え方が異なる実装方式があります。
花子:エンディアン?
先生:はい、ビックエンディアン、リトルエンディアンの実装方式があるのですが、今回は割愛します。
太郎:そう言われると気になる・・・
先生:う~ん・・・用語の都合上、すごく説明しにくいわりに、それほど基本の考え方に影響がないんですよねぇ・・・
花子:そうなの?
先生:はい、とにかく基本の考え方としては「連続したメモリに覚える」だけと考えるのが重要なんです。
太郎:確かに、バラバラの場所のものを1つとして扱うのは大変そうですよね・・・
先生:今回はここまでとしましょう。忘れ物がないか確認して気を付けて帰ってね。
太郎・花子:は~い

■まとめ
大きな数の扱いと、メモリの基本的な使い方の紹介でした。
重要なのは
・メモリは一列に並んでいて番号がついている。
・メモリは連続したものを使う
です。是非ここだけ憶えておいてください。

次回ひょっとしたら今度こそ文字の表現回に続く