今回は応用情報技術者試験でまず抑えておくべき2進数とn進数について解説していきます。
初心者の方でもこれを読めば、応用情報技術者試験に必要な知識を身につけられるようになっていますので、是非最後まで読んでみてください。
2進数やn進数とは?
まずは、2進数やn進数が一体なんであるのかを明記しておきましょう。
0 ~ n-1個までの数を用いて、あらゆる数値を表現する方法
n進数の一般的な定義はこの通りですが、抽象的で分かりづらいかもしれないので、早速具体例を見てみましょう。
まず私たちにとって最も馴染みがあるのは10進数です。nに10を当てはめればよいので、10進数は0~9を使って、あらゆる数値を表現する方法です。これはまさに私たちが普段の生活でやっていることですね。
しかし、コンピュータサイエンスなどの技術分野では10進数はほとんど使われず、最も基礎的で重要なのは、2進数です。
なぜ2進数が重要なのかは後述しますが、上記のn進数の定義に従うと、2進数は0と1であらゆる数値を表現する方法ということになります。
なぜ2進数が重要なのか?
2進数の中身を掘り下げていく前に、なぜ2進数が重要なのかを説明したいと思います。
10進数を使い慣れている我々の感覚からすると、2進数は使いづらいものです。様々な数を表現するのに0と1しか使えないというのは不便ですよね。
しかし、その直感的に分かりづらい2進数を使っているのにはちゃんとした理由があります。
コンピュータなどの電子機器はIC(Integrated Circuit=集積回路)と呼ばれる部品から構成されています。CPUやメモリなども中身はICの集合体です。

図をご覧になって分かるように、ICは黒いボディから銀色の足が何本も生えたような形をしています。そして、この銀色の足1本1本に加える電圧をON/OFFすることによってICは動作します。
ここで、電圧がOFFの状態を0、電圧がONの状態を1とすると、ICの状態を以下のように0と1を用いて表すことができるようになります。

電圧はONとOFFの2つの状態しかないので、0と1の組み合わせによって、ICのあらゆる状態を表現可能です。これは、0と1によってあらゆる数を表現するという2進数の発想と全く同じです。
このような背景があるためデジタルの世界では2進数が基本になっています。
ちなみに、2進数は
さらに、8ビットを1バイトとして定義します。よくデータ量の話をする時に使う○○バイトという単位はここからきています。
10進数を2進数(n進数)に変換する方法
2進数の重要性が分かったところで、まずは我々が普段使っている10進数を2進数で表現できるようになりましょう。
具体例として
ここから分かるように、10進数とは、10の累乗を基準として数値を表現しているとも言えます。
この考え方を応用すれば、
では、具体的に(A)の形を求めていきましょう。
まず、
そうすると、
あとは同じです。
従って、157という数字を2の累乗で表すと、次のようになります。
2の累乗の抜けているところを補うと、以下のように表現できます。付け足したところは、係数が0なので、右辺の合計値に変更はありません。
この係数を並べればよいので、
2進数が特に重要なので、2進数で説明しましたが、一般的にn進数でも考え方は全く同じです。
例えば、8進数であれば、
2進数(n進数)を10進数に変換する方法
今度は、逆に2進数を10進数に変換する方法を考えてみます。
では、具体例として、
ただ、これは単純に前章で説明したことの逆をやるだけです。2進数が
ここまで分かれば、もう左辺を計算するだけで、答えは
この考え方も2進数のみならず、一般的にn進数に当てはめることができます。
例えば、16進数で
2進数で負の数を表現する方法
ここからは2進数で負の数をどう表すかを説明していきます。10進数のようにマイナスをつけるだけなら簡単ですが、2進数では考え方が異なるため、順を追って分かりやすく解説します。
まず、負の数とはどんなものかを10進数で考えてみましょう。例えば、
2進数もマイナスはありませんが、「足したら
ただ、イメージは
少し分かりづらいですが、足し算を行なった際に桁が1つ上がる(上記の例では4桁から5桁)るような数を負の数と考えます。ご覧の通り、最上位の桁を無視してしまえば
求め方は後で説明しますが、答えだけ先に言ってしまうと、
ただ、ここまでで2進数の加算を説明していないので、少し寄り道になりますが、2進数の加算のルールを以下に記載します。
各桁に対して以下のルールで加算を行なう。
(桁上がり)
このルールに沿って、

右から順に各桁の加算を行ないます。一番右は
繰り返しになりますが、最上位の桁は無視するので、加算の結果が
では、最後に2の補数表現を求める手順を紹介します。
①0と1を反転する。
例)1101⇒0010
②一番右の桁に1を加算
例)0010⇒0011
ちなみに、2の補数表現では、最上位の桁が符号を表しており、最上位が1の2進数と最上位が0の2進数は異符号になります。
2進数で小数を表現する方法
ここからは2進数で小数を表していきます。
ただ、実を言うと、基本の考え方はすでに説明済みです。例として、0.375という数値を2進数で表現してみましょう。
10進数を2進数に変換するときは、このような形に直すのが基本だと言いましたが、これは小数でも同じです。ただし、少数の場合は
小数であっても(A)のように表現することができました。これでほとんど終わったも同然ですが、ここから2進数で表現していく方法が2通りあるので、それらを順を追って紹介します。
固定小数点表示
1バイトの2進数(8桁の2進数)で小数を表現することを考えます。
この時、固定小数点と呼ばれる方式では8桁のどこまでが整数(どこからが小数)であるかを予め決めておきます。
今回は、例えば5桁目までを整数と決めれば、0.375は1バイトの2進数で以下のように表されます。

ちなみに、固定小数点表示では、最上位桁に符号の情報を持たせることもあります。その場合は以下のような形になります。

浮動小数点表示
不動小数点と呼ばれる方式では、

これはどちらも同じ数値を表していますが、
浮動小数点表示における一般的なデータの保持形式を紹介します。浮動小数点表示では、必要な情報を32ビットのデータ列で保持します。

- A:0
- B:1111111
- C:11
ここまでで見て分かるように、固定小数点表示は分かりやすいですが、0がたくさん並んでしまうため、効率の面ではあまりよいとは言えません。一方、浮動小数点表示は直感的には少し分かりづらいところもありますが、無駄の無い効率的な表現となっているのが特徴です。
以上で、2進数とn進数の考え方と計算方法の説明を終わります!