Number Systems and Bases

Base systems like binary and hexadecimal seem a bit strange at first.これは、2進数や16進数のような基本的なシステムです。 重要なのは、異なるシステムが満杯になると、走行距離計のように「時を刻む」仕組みを理解することです。 10進法の場合、10個になると「カチカチ」と音がして、新しい桁が作られます。 60秒後に新しい分単位に切り替わります。 16進数と2進数も同様ですが、それぞれ16項目と2項目ごとに切り替わります。

ここで16進数と2進数に変換してみましょう。 Unary Numbers

Way back in the day, we didn’t have base systems! 雪と炎天下の中、坂道を登り続けました。 1を数えるときは

l

5を数えるときは

lll

そして明らかに、1 + 5 = 6

l + lll = llll

これは最も簡単な数え方だ。

ローマ人の登場

ローマ数字では、2が1、2回。

one = Itwo = IIthree = III

しかし、彼らは、砂に線を引くという古い伝統よりも良いことができると考えました。 5 の場合、V を使って lllll を表し、

l + V = Vl

悪くないでしょう? もちろん、他にも使える記号 (L, C, M など) はたくさんあります。

重要なのは、V と lllll は数字の 5 をエンコードする 2 つの方法であるということです。 3を一連の1として表すのではなく、独自の記号を与えるのです。 “3″.

1 2 3 4 5 6 7 8 9

ローマ人はそれに近かったが、5、10、50、100、1000などには独自の記号を与えただけであった。

しかし、ローマ数字について、1つの洞察に注目してください:彼らは意味を示すために記号の位置を使用しています。 常に足し算をし、引き算はしません。

Our choice of base 10

Why did we choose to multiply by 10 each time?

1つのポイントは、次の数字にぶつかるまで「埋める」のに十分な桁数が必要であることです。

いわば、10ごとにオドメーターを回転させたい場合、1から9までの数字の記号が必要ですが、まだ10には到達していないのです。 数字はゆっくり上に向かって刻んでいくものだと想像してください。どの時点で次の単位を裏返し、何もないところからスタートするのでしょうか。 10」がちょうど1つで、「1」の列には何もないことを示すにはどうしたらよいのでしょうか。

私たちはゼロ、つまり存在しない数を使用します。 ゼロは非常に複雑な概念で、プレースホルダー、空白、スペース、その他いろいろな意味があります。 451>

ゼロは、ローマ人が持っていなかった、空のプレースホルダーを持つことを可能にします。

ジョージ・オーウェルの有名な小説「1984」は、「MCMLXXXIV」になります。 舌の上で転がりますよね?

他のベースを考える

私たちがオドメーターを10ごとにロールオーバーすることにしたのを覚えておいてください。

123456789 (uh oh, I'm getting full!)10 (ticked over – start a new digit)

秒や分と同じように、60でカウントしたらどうでしょう?

1 second2345…58591:00 (60 seconds aka 1 minute. We've started a new digit.)

ここまでは順調ですよね? コロン(:)を使って、新しい「桁」に到達したことを示すことに注意してください。

Try Base 16

もし私たちがベース16を望むなら、似たようなことができます:

123456789101112131415 (we're getting full)1:00 (16 – we've started a new digit)

しかし、私たちはコロン表記で16進数を書きたくありません(書けたとしてもです)。 10-15を別の記号にすることで、今まで通り数字を書けるようにしたいのです。 数字が足りなくなったので(1〜9はすでに使用済みで、0はプレースホルダー)、他の記号が必要です。 このため、他の記号が必要です。ジグザグした線や他の図形を使うこともできますが、ローマ字で書くのが一般的です。 5がVになったように、プログラマーはA〜Fの文字を使って16までの十分な桁数を確保する。 つまり、

123456789A (10 – we're using the symbol "A")B (11)C (12)D (13)E (14)F (15 – uh oh, we're getting full)10 (16 – we start a new digit)

ああ!これで1つの「場所」につき1つの数字を使うことができ、10は実際に「16まで1回刻んだ」ことを意味します。 合計すると、32 + 5 = 37.

簡単な復習

ここまでは一緒ですね? これ、かなりイケてますよね? 好きなシステムで数えることができるのです。 また、11のような数字を1桁で書くことができるという意味で、16進法がより「スペース効率的」であることに注目してください。

The wonderful world of binary

私たちは、単純すぎる単項式から、不規則なローマ数字、安定した10進数、コンパクトな16進数まで、たくさんの基数系を見てきました。 物事をシンプルにする精神に基づき、「刻む」という概念を持つ最もシンプルな数体系です。 1、11、111…と書くだけの単項式は、ただ永遠に続くだけです。 2進数は1と0の2択で、

1: 12: 10 (we're full – tick over)3: 114: 100 (we're full again – tick over)5: 1016: 1107: 1118: 1000 (tick over again)…

といった具合です。2進数は非常にシンプルなので、ハードウェアの構築も非常に簡単です。 10 進法を表すような 10 の可能な状態ではなく、オンまたはオフできるもの (1 と 0 を表す) が必要なだけです。

非常にシンプルなので、バイナリもエラーに強いです。 信号が「部分的にオン」(仮に 0.4 とする)であれば、それは 0 と仮定してよい。 10通りの状態があるシステムを使うと、いつエラーが発生したのかが分かりにくい。 これは、デジタル信号がノイズに強い理由の1つです。

その他の基底の例

私たちは常に他の基底を使っており、動的に変化する基底さえ使っています。 通常、そのように考えることはありません。

時、分、秒。 1:32:04

  • これが 1 時間 32 分 4 秒であることは分かっています。 秒にすると、16060+32*60+4.

フィートとインチです。 3′ 5″

  • これは3フィート、5インチまたは3 * 12 + 5 inches.

Pounds and ounces.である。 8 lbs, 5 oz

  • 1ポンドは16オンスなので、This is 8 * 16 + 5 oz.です。 私たちはずっと基数16の数体系を使っていたのです!

別れの挨拶

どの数体系でも「10」は基数を示し、一度目を通したことを意味します。 2 進法の 10 は 2、10 進法の 10 は 10、16 進法の 10 は 16 を意味します。

これらの数字をどのように区別するのでしょうか。 プログラマは2進数の前に「0b」と書くことが多い。 だから2進数の2は

0b10

同様に、16進数の前に0xを書くだろう。 つまり16進数の16は、

0×10

前に何も記号(0bや0x)がなければ、それは10進数、普通の数だと考える。

さあ、あなたの新しい知識を楽しんでください!

Other Posts In This Series

  1. Number Systems and Bases
  2. The Quick Guide to GUIDs
  3. Understanding Quake’s Fast Inverse Square Root
  4. A Simple Introduction To Computer ネットワーキング
  5. XOR を使って 2 つの変数を交換する
  6. Understanding Big and Little Endian Byte Order
  7. Unicode and You
  8. A little diddy about binary file formats
  9. Sorting Algorithms

コメントを残す

メールアドレスが公開されることはありません。