普段、私たちが何かを数える際は、1から数えます。
1.2.3.4.5.6… といった感じですね。
でもコンピュータやプログラミングの世界では、0から数えるケースがよくあります。
というか、0から始めることの方が多いです。
ちなみにこの0という数字は、他の1~9までの数字よりも歴史が浅く、昔は0(何も無い)という数の概念が無かったんだそうですよ!
前の記事で「コンピュータは0と1の数字をたくさん覚えておくことが出来る」と説明しました。
大抵のプログラミング言語には、配列という機能が用意されています。
変数が1つの数字を覚えておく為の箱だとすると、配列はその箱が複数個連なったものといえます。
配列の箱には順番に番号が振ってあり、この番号も0から始まります。
何故1からではなく0から始めるのでしょうか?
多くのプログラム言語の配列が0からスタートするのは、コンピュータのメモリへのアクセスの仕方に大きく影響しています。
C言語ではポインタという仕組みがあります。
C言語を覚える上で、初心者がつまづきやすいポイントの1つがこのポインタだったりするのですが、このポインタというのは、コンピュータのメモリ上のある場所を示しているマーカーみたいなものです。
コンピュータでは、メモリ上の値を取得したり書き換えたりする際に、このポインタからどの場所のメモリを書き換えるのかを指定します。
つまり、スタート地点からの距離を指定する必要があります。
なので、スタートの場所の値にアクセスする場合は、距離0の場所という指定になるわけですね。
番目でいうと1番目というわけです。(0番目とはあまり言いませんよね)
図の例でいうと、スタート地点から距離3の場所は、4番目の箱で中の数字は5となります。
このような都合もあって、プログラミングでは0から数え始めるケースが多く、CPUによっては0を扱う場合では、他の数字を扱う場合より実行速度が速くなることなどもあって、より積極的に0を使うようになりました。
C言語などを学んでいれば、自然と身についてきますので、特に意識をする必要は無いと思いますが、プログラミングが0から始まる理由について、皆さんも分かっていただけましたでしょうか?
全然関係ないですけど、0号機とかって聞くと、なんとなくプロトタイプ(試作機)なのかなーって思ってしまいます。
アパートや団地とかでも、たまに0号棟ってあって、どういうつもりで0を付けてるのか、少し気になります。
コメント