2進数と16進数:数値形式

この投稿では、記数法とそれらの形式について紹介します。ここでは、記数法の違いやどこで使われているのか、また、使用される理由などについて説明します。さまざまな記数法の構造を理解することは、多くのアプリケーションで重要です。

記数法

最初に説明しなければならないのは、「基数または底(てい)」という用語です。これは、異なる数の表記法で使用できる記号(数字、文字を含む)の数を示しています。例えば、通常の10進数では、基数が10で、10個の記号を使用します。私たちが日常的に使用しているどんな数でも、0から9までの数字で表すことができます。基数については、2から無限大の数字を使うことができるため、無限の記数法があることになりますが、これは実際のところ実用的ではありません。そのため、便宜上、利用可能ないくつかの記数法のみ(例えば、基数が2, 10, 16 など)を使用しています。また、基数が 1(1進数)で数値を表すこともできますが、これは大きい10進数の数字を表わす場合、桁数がとてつもなく多くなってしまうため、非現実的です。

B^{n-1}: n=0...+\infty

どの様な基数Bの場合でも、最高桁数の指数は、N桁の数の場合N-1 となり、各桁は、Bの(n-1)乗の重みがあります。ここで、n=0~N
N (=n-1)は、指定された基数でフォーマットされた数を表す記号(数字、文字を含む)の個数を表します。100 のような 3 桁の数値を基数 1 (1進数)で表現するには、合計が100になるように1^0以外に99 桁の数字が必要になります (どんな数でも、その0乗は0となります。0の0乗は不定です)。0乗から始まっていますので、最大桁の指数がN-1となる理由です) 基数Bのn乗の有効な記号の数値の和は、最終的な10進数の数値100に等しくなります。1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 は、上記にように、基数 1で10進数での100に相当するものとなりますが、1進数は桁数が多く、全く有用なフォーマットとは言えません。
BaseFormatDiag
基数が異なっていてもすべての数の書式は上記の構造になっています(カンマは「桁」を区切るためだけのものです)。私は左から右に計算するのが好きですが、指数の増加順は右から左になります。以下は、10進数に変換する計算方法です。

V_{place}*B_{base}^{n}+V_{place}*B_{base}^{n-1}+...+V_{place}*B_{base}^{2}+V_{place}*B_{base}^{1}+V_{place}*B_{base}^{0}

"Vplace "は、特定の規定Bで使用可能な記号数以下の数値を表します(10進数では0~9の10個、2進数で0と1の2個、16進数では0~9,A,B,C,D,E,Fの16個が許容されます)。”Vplace" は、それぞれの桁の基数のべき乗と乗算されます。"place"に、作業している底の指数を上げて乗算されます。( Vplace * Bnbase などのように)

Decimal=10^{n}; Binary=2^{n};Hexadecimal=16^{n}

10進数と他の2つの記数法(2進数と16進数)との変換方法については、次の投稿で説明します。




オリジナル・ソース(英語)