16進数は、0〜9とA〜Fの16種類の数字で数を表す方法です。2進数・10進数・16進数の基数変換を、4ビットずつ区切る方法・2で割る方法・重みを掛ける方法で、自作の計算例と検算つきで整理。2進数の足し算、16進数の小数、色コードの読み方、IPAの公開問題(科目A・科目B)の解き方も載せています。
目次
結論:16進数は、0〜9とA〜Fの16種類の文字で数を表す方法で、1桁で 0〜15 を表します。2進数との変換は4ビットずつ区切るだけなので、10進数との変換より簡単です。10進数への変換は「各桁に重み(1、16、256、…)を掛けて足す」、10進数から2進数・16進数への変換は「2または16で割って余りを下から並べる」が基本です。IPAのシラバスは、基本情報技術者試験で「2進数,8進数,10進数,16進数,n進数の表現,2進数と10進数などの基数の変換手法を理解する」ことを求めています。
シラバスの版:基本情報技術者試験は Ver.9.2、ITパスポート試験は Ver.6.5。最終確認日:2026-10-21。出典:IPA 試験要綱・シラバスについて。
シラバスの位置は次のとおりです。基本情報技術者試験の Ver.9.2 は、大分類1 基礎理論/中分類1 基礎理論/1. 離散数学/(1) 基数に、「2進数,8進数,10進数,16進数,n進数の表現,2進数と10進数などの基数の変換手法を理解する。」と書いています。ITパスポート試験の Ver.6.5 は、大分類7 中分類13 基礎理論の33. 離散数学 (1) 数と表現に、「2進数の表現,基数変換の方法,2進数の加算や減算,表現可能な数値の範囲などの考え方」を挙げています(IPA 基本情報技術者試験 シラバス Ver.9.2・IPA ITパスポート試験 シラバス Ver.6.5)。
基数とは:n進数と、桁の重み
基数は、位取り記数法で「何を単位に桁が上がるか」の数です。10進数は10ずつ、2進数は2ずつ、16進数は16ずつ桁が上がります。右から数えた桁には「重み」があり、10進数の 245 が 2×100 + 4×10 + 5×1 であるのと同じように、16進数の 2D は 2×16 + 13×1 = 45 です。
| 基数 | 使う文字 | 桁の重み(右から) |
|---|---|---|
| 2進数 | 0, 1 | 1, 2, 4, 8, 16, … |
| 10進数 | 0〜9 | 1, 10, 100, 1000, … |
| 16進数 | 0〜9, A〜F | 1, 16, 256, 4096, … |
16進数の1桁と、10進数・2進数(4ビット)の対応表です。この表は、当サイトの計算(Pythonで全16行を出力)で、変換の基礎になります。
| 16進 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 10進 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 2進(4ビット) | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
| 16進 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|
| 10進 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 2進(4ビット) | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
2進数と16進数の変換:4ビットずつ区切る
16は2の4乗(2×2×2×2)なので、2進数の4桁がちょうど16進数の1桁になります。変換は区切って置き換えるだけです。
- 2進数→16進数:右(下位)から4ビットずつ区切り、上の表で1桁にする
- 16進数→2進数:1桁ずつ4ビットの2進数にして並べる
自作の例です。2進数 10110111 を16進数にします。右から区切ると 1011 と 0111 で、1011=B、0111=7 なので B7 です。逆に 2D(16進数)は 2=0010、D=1101 なので 00101101 です。
桁数が4で割り切れないときは、左(上位)に0を補って4ビットにそろえます。1101011(7桁)は、左に0を1つ足して 0110 1011 とし、6B になります。検算として、1101011 を10進数にすると 64+32+8+2+1=107、6B は 6×16+11=107 で一致します(Pythonでも一致)。
10進数から2進数・16進数へ:割り算で余りを集める
変換したい数を、基数で割って余りを取る操作を、商が0になるまで繰り返します。余りを下から(最後に出た余りが先頭)並べます。
自作の例です。10進数の 45 を2進数にします。
- 45 ÷ 2 = 22 余り 1
- 22 ÷ 2 = 11 余り 0
- 11 ÷ 2 = 5 余り 1
- 5 ÷ 2 = 2 余り 1
- 2 ÷ 2 = 1 余り 0
- 1 ÷ 2 = 0 余り 1
余りを下から並べると 101101 です。検算は重みで行います。32+8+4+1=45 です(Pythonでも一致)。
16進数にするときは、16で割ります。183 ÷ 16 = 11 余り 7、11 ÷ 16 = 0 余り 11(B)なので、下から並べて B7 です。前の節で、B7 は 10110111 でしたから、2進数にして 4ビットずつ見る方法とも一致します。10進数の 183 を2進数で書くと 10110111 です。
2進数・16進数から10進数へ:重みを掛けて足す
各桁の値に重みを掛けて足し合わせます。
- 1011001(2進数)= 64+16+8+1 = 89
- B7(16進数)= 11×16 + 7 = 183
2進数は、左から1桁ずつ読みながら「それまでの値を2倍して、今の桁を足す」計算でも求められます。1011001 を左から読むと、1 → 1×2+0=2 → 2×2+1=5 → 5×2+1=11 → 11×2+0=22 → 22×2+0=44 → 44×2+1=89 で、重みで求めた 89 と一致します(Pythonで各段階を出力して一致)。この「2倍して足す」形は、プログラムでよく使われます。次のIPAの公開問題が、その形を使っています。
公開問題を解く:科目B 令和6年度 問2(2進数の文字列を整数に変換する)
令和6年度 科目B 問2は、「0」と「1」だけからなる文字列を、符号なしの2進数と解釈したときの整数値を返す関数 convDecimal の空欄を埋める問題です(IPA 問題PDF・解答例PDF)。プログラムは、変数 result を0にして、文字列の長さ(length)の回数だけ繰り返し、空欄の式で result を更新します。選択肢のうち、IPAの解答例の正解は、エの「result × 2 + int(binary の i文字目の文字)」です。
なぜエか。繰り返しは i を 1 から length まで増やし、i が増えるにつれて binary の左から右へ1文字ずつ読みます。左から読むときは、前の節の「それまでの値を2倍して、今の桁を足す」形になります。先頭の桁は、後ろの桁を読むたびに2倍されるので、自然に大きな重みになります。「2倍」が付かない選択肢(ア・イ)は、桁を足しているだけで重みが付きません。2倍が付いていても、右から読む(length - i + 1 文字目)選択肢(ウ)は、桁の順序が逆になり、同じ文字列から別の値になります。
自作の練習です。文字列 1011001 を上のプログラムで処理すると、result は 1、2、5、11、22、44、89 と変わり、最後は89です(前の節の計算と同じ)。
2進数の足し算と桁あふれ
2進数の足し算は、10進数の筆算と同じで、1+1=10(桁上がり)になります。自作の例です。
- 01101011(107)+ 00110110(54)= 10100001(161)。10進数で 107+54=161 で、10100001=128+32+1=161 と一致します
- 8ビットで表せる範囲を超えると桁あふれ:11001010(202)+ 01110111(119)= 101000001(321、9ビット)。8ビットでは下位8ビットの 01000001(65)だけが残ります。321=256+65 で、あふれた256の分が失われた形です
引き算を足し算で行う2の補数は、2の補数の記事にまとめています。
小数の変換:16進小数・2進小数
小数点より下の桁は、1/2、1/4、1/8、…(2進数)や 1/16、1/256、…(16進数)の重みで読みます。
- 0.A8(16進数)= 10/16 + 8/256 = 0.625 + 0.03125 = 0.65625
- 0.375(10進数)を2進数にするには、2倍して整数部分を取り出します。0.375×2=0.75(整数部分0)、0.75×2=1.5(1)、0.5×2=1.0(1)で、0.011。検算は 1/4 + 1/8 = 0.375
ただし、10進数の 0.1 のように、2進数では有限桁で終わらない小数があります。2倍して整数部分を取る操作を続けると 0.000110011001… と 0011 が繰り返されます(Pythonで先頭12桁を出力)。小数を有限のビット数で保存すると誤差が出る理由の一つです。仕組みは浮動小数点数の記事で扱っています。
公開問題を解く:科目A 令和5年度 問1(16進小数)
令和5年度 科目A 問1は、「16進小数0.Cを10進小数に変換したものはどれか」という問題です。C は12なので、12/16=0.75。IPAの解答例の正解はウです(IPA 問題PDF・解答例PDF)。前の節の 0.A8 と同じ考え方で、桁が1つ少ない形です。
16進数が使われる場面:マスク・色コード
16進数は、2進数のビット列を短く書くために使われます。2進数 10110111 は8桁ですが、16進数なら B7 の2桁です。
- ビット演算のマスク:自作の例で、B7 AND 3C = 34(真ん中の4ビットを取り出す)、B7 AND F0 = B0(上位4ビットだけ取り出す)、B7 XOR 0F = B8(下位4ビットだけ反転)になります(Pythonで出力して一致)。IPAの平成31年度 春期 午前 問2「最上位をパリティビットとする8ビット符号において,パリティビット以外の下位7ビットを得るためのビット演算」は、16進数 7F との AND をとる、が正解(ウ)です(IPA 問題PDF・解答例PDF)
- 色の指定:Webの色指定(CSS)は、# に続けて6桁で書く場合、16進数で赤・緑・青の強さを2桁ずつ書きます(CSSは3・4・8桁の書き方も認めています)。W3CのCSS Color Module Level 4 は、6桁の場合に最初の2桁が赤、次の2桁が緑、最後の2桁が青で、00 が最小、ff(10進数で255)が最大と定めています。自作の例で、#FF8000 は赤255・緑128・青0 です(16進数 80 = 8×16 = 128)。出典:W3C CSS Color Module Level 4 5.2 The RGB Hexadecimal Notations
基数変換で間違えやすい点
- 余りを上から並べる:割り算の余りは、最後に出たものが先頭(下から並べる)です
- 4ビットの区切りを左から切る:区切りは右(下位)からです。7桁なら、左に0を補って4桁にそろえます
- A〜F を10〜15に直さずに計算する:B7 は「11 × 16 + 7」です。文字のまま扱わず、先に10進数の値に直してから重みを掛けます
- 桁あふれを見落とす:n ビットで表せる範囲を超えた分は、上位の桁が失われます
まとめ
よくある質問
Q2進数を16進数に変換する一番簡単な方法は何ですか?
右(下位)から4ビットずつに区切り、4ビットごとに16進数の1桁に置き換えます。たとえば 10110111 は 1011 と 0111 に分けて、1011=B、0111=7 なので B7 です。逆向きは、16進数の1桁を4ビットの2進数に直して並べます(当サイトの計算例)。4ビットで表せる値が 0〜15 の16通りで、16進数の1桁(0〜F)と同じ数だけあるので、この対応が成り立ちます。
Q16進数のAからFは、10進数でいくつですか?
A=10、B=11、C=12、D=13、E=14、F=15 です。16進数の1桁は 0〜15 を表すので、10以上を1文字で書くために A〜F の文字を使います。
Q16進数の小数も、整数と同じ考え方で変換できますか?
できます。小数点より下の桁は、1/16、1/256、…の重みになります。たとえば 0.A8(16進数)は 10/16 + 8/256 = 0.625 + 0.03125 = 0.65625 です(当サイトの計算例)。IPAの令和5年度 科目A 問1 も、16進小数を10進小数に直す問題です。
Q10進数の 0.1 は、2進数できれいに表せますか?
表せません。0.1 を2倍して整数部分を取り出す操作を繰り返すと、2進数で 0.000110011001… のように 0011 の繰り返しが続き、有限の桁では終わりません(当サイトの計算例)。0.375 のように 2の何乗分の1 の和(0.375=1/4 + 1/8)で書ける数は、2進数で 0.011 と有限の桁で表せます。
法令や試験の数字は、改正や年度で変わります。この記事の最終確認日は2026年10月21日です。申込みや合格基準は、必ず試験団体の公式情報で確かめてください。

