SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

マンガで分かるプログラミング用語辞典

「2進数」
~マンガでプログラミング用語解説

マンガで分かるプログラミング用語辞典(10)

  • X ポスト
  • このエントリーをはてなブックマークに追加

解説

 プログラムは、コンピュータに命令を実行させる手段です。コンピュータは、データを0と1で表わされた2進数の数字として扱います。この2進数について解説します。

 普段、私達が両手で数えて使っている数字は、10ごとに桁が上がる、10進数という数え方です。世の中には、他にも色々な数え方があります。時計のように、60秒で1分のように桁が上がる数え方もあります。また、ビール箱のように、12本単位で数えるダースといった数え方もあります。2進数は、こういったものと同じような「数え方」になります。

 では、2進数とはどんな数え方なのでしょうか? それは、2ごとに桁が上がる数え方です。0、1の次は、2ではなく、桁が1つ上がって10になります。慣れない人は、ちょっと分かり難い数え方だと思います。

例)2進数の桁の上がり方
2進数  10進数
   0      0
   1      1
  10      2
  11      3
 100      4
 101      5
 110      6
 111      7
1000      8
   :      :

 なぜ、こんな特殊な数え方をするのでしょうか? それはコンピュータの機械的な仕組みが関係しています。その一例を、データの記録という面から見てみます。

 コンピュータでは、数値などの情報を、記録場所に読み書きして管理しています。この記録場所は、分かりやすく言うと、コップが大量に並んでいるような状態になっています。

例)
│ ││ ││ ││ ││ │
│ ││ ││ ││ ││ │
│ ││ ││ ││ ││ │
└─┘└─┘└─┘└─┘└─┘

 このコップの中に水が入っているかどうかで、情報が「ある」か「ない」かを判断しています(実際には、この「コップの水」というのは、電磁的な記録だったり、光学的に読める物だったりします)。

 問題なのは、このコップの中の水をどう読み取るかです。1%の水が入っているから「1」、98%の水が入っているから「98」と読んでもよいのですが、機械の精度が要求されます。また、読み取りエラーが置きやすくなります。

 一番単純なのは、たとえば50%以上入ってれば「1」、未満なら「0」のようにして、「入っている」か「入っていない」かだけを判断する方法です。こうすれば、機械の精度はあまり要求されず、エラーも減ります。高速に読み書きしても、あまりトラブルは起きません。

 このようにした場合、記録場所に0と1が大量に並ぶことになります。これは、そのまま2進数の表現になります。

例)
┝━┥│ ││ │┝━┥│ │
│ ││ ││ ││ ││ │←真ん中の位置
│ │┝━┥│ ││ │┝━┥
└─┘└─┘└─┘└─┘└─┘
 1  0  0  1  0

 そのため2進数は、コンピュータで取り扱うのに便利な数え方になります。

 そして、プログラムでは、コンピュータの内部の動きを制御するので、必然的に2進数に触れることになります。

 また、人間が10進数を使うのは、手の指が10本だという理由が大きかったりします。郷に入っては郷に従えということで、コンピュータ相手には2進数で数を数えるというわけです。

 ちなみに、世界初のコンピュータENIACは、10進数を採用していたそうです。

サンプル

 2進数の処理を、JavaScriptで簡単に書いてみます。

<html>
    <head>
        <title>「2進数」のサンプル</title>
    </head>
    <body>
        <pre><script type="text/javascript">
            document.writeln("10進数の0~100を2進数で表わす\n");
            for (var i = 0; i <= 100; i ++) {
                document.writeln(
                      form(i, 3)
                    + " - "
                    + form(i.toString(2), 7)
                );
            }

            document.writeln("\n\n2進数を10進数で表わす\n");
            for (var i = 0, s = "1"; i < 10; i ++, s += "1") {
                document.writeln(
                      form(s, 10)
                    + " - "
                    + form(parseInt(s, 2), 4)
                );
            } 

            // 桁揃え用関数
            function form(s, n) {
                if (String(s).length < n) {
                    s = form(" " + s, n);
                }
                return s;
            }
        </script></pre>
    </body>
</html>
出力結果)
10進数の0~100を2進数で表わす

  0 :       0
  1 :       1
  2 :      10
  3 :      11
  4 :     100
  5 :     101
  6 :     110
  7 :     111
  8 :    1000
  9 :    1001
 10 :    1010
~~省略~~
 95 : 1011111
 96 : 1100000
 97 : 1100001
 98 : 1100010
 99 : 1100011
100 : 1100100


2進数を10進数で表わす

         1 :    1
        11 :    3
       111 :    7
      1111 :   15
     11111 :   31
    111111 :   63
   1111111 :  127
  11111111 :  255
 111111111 :  511
1111111111 : 1023
フィードバックお待ちしております!

 ご感想、解説して欲しい用語、解説内容のアドバイスなどございましたら、FacebookTwitterなどでお気軽に編集部までお寄せください。よろしくお願いいたします。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
マンガで分かるプログラミング用語辞典連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6745 2012/09/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング