同じ値を2進数・8進数・10進数・16進数で書き直す
数の基数(「底」)とは、次の位に繰り上がる前に数体系がいくつの異なる桁を使うかです — 10進数は10(0〜9)、2進数は2(0〜1)、8進数は8(0〜7)、16進数は16(0〜9の後にA〜F)を使用します。これら4つの基数のいずれかで整数を入力すると、この計算機は同じ値を4つすべてで書いたものを一度に表示します。
2進数はコンピューターがすべての値を内部で表す方法です(各桁が1「ビット」)。16進数はプログラミングにおける2進数の一般的な省略表記です(各16進数の桁がちょうど4つの2進数の桁を表すため、読み書きがはるかにコンパクトです)。8進数は古いUnixのファイル権限や一部の低レベルの文脈で使われます。10進数は日常的な基数10のシステムです。
計算式
すべての位取り記数法は同じように機能します: 各桁はその位の累乗の基数を掛けられ、それが合計されます:
ここでは位置の桁です(一番右の桁を0として数えます)。別の基数に変換するには、10進数の値を新しい基数で繰り返し割り、各余りを記録します — 上の合計の逆です。
計算例
2進数11111111を他の3つの基数に変換する場合:
- 右から左に読み、各
1がその位の値を寄与します: 。 - 10進数: 255。
- 8進数: 255を8で繰り返し割ると(255 ÷ 8 = 31余り7、31 ÷ 8 = 3余り7、3 ÷ 8 = 0余り3)、余りを下から上に読んで377。
- 16進数: 255 ÷ 16 = 15余り15、15 ÷ 16 = 0余り15 — 両方の余りが15(16進数でF)であり、FFが得られます。
考慮すべき重要なポイント
- 1バイト(8ビット)は正確に256個の異なる値 — 10進数で0から255、16進数で00からFF — を表現できます。 これが、255/FFがコンピューティングにおいてよく参照される値である理由です — 1バイトが保持できる最大値であり、RGBカラーチャンネル(チャンネルあたり0〜255)からネットワークやファイル形式まで、あらゆる場所に現れます。
- 8進数は、主に古いコンピューターのワードサイズのために、今日よりも歴史的にはるかに一般的でした。 8進数(基数8)は3つの2進数の桁のグループにきれいに対応するため、3ビットで割り切れるワードサイズを中心に構築されたコンピューターに適していました — 現代のコンピューティングは、ほとんどの最新ハードウェアが4や8で割り切れるワードサイズを使用しているため、(4ビットのグループに対応する)16進数に大きく移行していますが、8進数は今でもUnixのファイル権限表記(例: chmod 755)のような特定の文脈で見られます。
- プログラマーによくある間違いは、文脈だけで数の基数を混同することです。 数字「10」は基数によって全く異なる値を意味します — 10進数では10、2進数では2、8進数では8、16進数では16です — これが、プログラミング言語が通常、意図する基数についての曖昧さをなくすために明示的な接頭辞(16進数の0xや2進数の0bなど)を要求する理由です。
- 理論上、あらゆる整数はこの4つに限らずどんな基数でも表現できます。 2進数、8進数、10進数、16進数は、コンピューティングと日常の数学で最も一般的に実際に使われている4つの基数に過ぎません — この計算機が使うのと同じ位取り記数法の原理は、基数3、基数20、基数60(時間や角度が伝統的に分割される基準)など、どんな基数にも拡張できます。
よくある間違い
- 接頭辞のない混合基数の数をデフォルトで10進数として読むこと。 「10」は10進数では十を意味しますが、2進数ではわずか二を意味します — 計算する前に、その数がどの基数で書かれているか必ず確認(または明示)しましょう。
- 先頭のゼロが値を変えると考えること。 10進数と同様、2進数の
0011は11と同じ値です — 先頭のゼロは固定幅の表示(バイト全体を示す場合など)にのみ意味があり、数の実際の値には関係ありません。 - 9より大きい16進数の桁が文字を使うことを忘れること、2桁の数字ではありません。 16進数の十は
10ではなくAと書きます — 16進数で10と書くと実際には10進数の十六を意味し、大きな誤差の原因になりがちです。 - 負の数を直接変換しようとすること。 上記のFAQで述べた通り、負の2進数/16進数の値は選択したビット幅と2の補数の慣習に依存します — 非負の整数のような単一の明確な変換方法はありません。
知っておくと役立つこと
- 任意の数値ではなくネットワークアドレスを扱っていますか?IPサブネット計算機は同じ2進数/10進数の関係をIPv4アドレスに特化して適用します。
- コンパクトな形で非常に大きい、または非常に小さい10進数が必要ですか?指数表記計算機はその種の変換を代わりに扱います。
- もっと古い、位取りに関連した数体系に興味がありますか?ローマ数字計算機は、まったく異なる(非位取りの)方式を使うローマ数字との変換を行います。