最終更新日:2026年8月3日
fe fe-technology basic-theory number-system bit-operation
まず結論
16進小数を2倍、4倍、8倍するときは、いったん2進数として考えると判断しやすくなります。
2倍 = 2¹倍 → 2進数の小数点を右へ1ビット
4倍 = 2²倍 → 2進数の小数点を右へ2ビット
8倍 = 2³倍 → 2進数の小数点を右へ3ビット
基本情報技術者試験では、次の順番で解くと安全です。
1. 倍率を2のべき乗で表す
2. 16進数1桁を2進数4ビットへ直す
3. 2進数の小数点を必要なビット数だけ動かす
4. 小数点を基準に4ビットずつ区切る
5. 16進数へ戻す
判断の中心は、2ⁿ倍なら2進数の小数点を右へnビット動かすことです。
直感的な説明
10進数では、小数点を右へ1桁動かすと10倍になります。
1.25 × 10 = 12.5
これは、10進数の1桁が10倍の位置を表すためです。
同じように、2進数では小数点を右へ1ビット動かすと2倍になります。
1.01₂ = 1.25₁₀
小数点を右へ1ビット
↓
10.1₂ = 2.5₁₀
さらに右へ2ビット動かすと4倍です。
1.01₂
↓ 右へ2ビット
101₂
16進数は1桁が16倍、つまり2⁴倍の位置を表します。
そのため、16進数の小数点を1桁動かすと16倍になります。4倍のように16より小さい倍率では、16進数の桁だけを見て動かすより、2進数へ直して考える方が分かりやすくなります。
定義・仕組み
16進数1桁は2進数4ビットに対応する
16進数の1桁は、0から15までの16通りを表します。
2進数4ビットも、0000 から 1111 までの16通りを表すため、1桁ずつ対応させられます。
| 16進数 | 2進数 | 16進数 | 2進数 |
|---|---|---|---|
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
たとえば、16進数の 0.A6 は次のように変換できます。
A → 1010
6 → 0110
したがって、
0.A6₁₆ = 0.1010 0110₂
となります。
2のべき乗倍と小数点の移動
2進数の各桁は、左へ1桁進むごとに重みが2倍になります。
| 位置 | 重み |
|---|---|
| 小数点の左1桁目 | 2⁰ |
| 小数点の左2桁目 | 2¹ |
| 小数点の右1桁目 | 2⁻¹ |
| 小数点の右2桁目 | 2⁻² |
そのため、数値を2ⁿ倍するときは、小数点を右へnビット動かせます。
2ⁿ倍
→ 2進数の小数点を右へnビット
逆に、2ⁿで割るときは左へnビット動かします。
1 ÷ 2ⁿ
→ 2進数の小数点を左へnビット
計算例:16進小数を4倍する
16進数 0.A6 を4倍してみます。
まず、2進数へ変換します。
0.A6₁₆
= 0.1010 0110₂
4倍は2²倍なので、小数点を右へ2ビット動かします。
0.1010 0110₂
↓ 右へ2ビット
10.1001 10₂
16進数へ戻すため、小数点を基準に4ビットずつ区切ります。足りない部分には0を補います。
0010 . 1001 1000
各まとまりを16進数へ戻します。
0010 → 2
1001 → 9
1000 → 8
したがって、
0.A6₁₆ × 4 = 2.98₁₆
となります。
確認のため10進数で計算すると、
0.A6₁₆
= 10/16 + 6/256
= 0.6484375₁₀
0.6484375 × 4
= 2.59375₁₀
2.98₁₆
= 2 + 9/16 + 8/256
= 2.59375₁₀
となり、結果が一致します。
このテーマは、基本情報技術者試験の基礎理論や数値表現と関係します。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、16進小数を2倍・4倍・8倍した結果や、2進数と16進数の対応を選ぶ問題が考えられます。
解き方の手順
倍率を確認する
↓
2の何乗かを求める
↓
16進数を2進数へ変換する
↓
小数点を動かす
↓
4ビットずつ区切って16進数へ戻す
倍率から移動量を決める
| 倍率 | 2のべき乗 | 小数点の移動 |
|---|---|---|
| 2倍 | 2¹ | 右へ1ビット |
| 4倍 | 2² | 右へ2ビット |
| 8倍 | 2³ | 右へ3ビット |
| 16倍 | 2⁴ | 右へ4ビット |
| 1/2倍 | 2⁻¹ | 左へ1ビット |
| 1/4倍 | 2⁻² | 左へ2ビット |
倍率が2のべき乗であれば、通常の掛け算をせずに桁の位置で考えられます。
16進数のまま動かせる場合
16進数1桁は2進数4ビットです。
そのため、16倍は2⁴倍なので、16進数の小数点を右へ1桁動かせます。
0.3A₁₆ × 16
= 3.A₁₆
一方、4倍は2²倍であり、16進数では半桁分に相当します。16進数の桁だけでは表しにくいため、2進数へ変換する方法が安全です。
選択肢を切る確認方法
おおよその大きさを先に確認すると、明らかな誤答を切れます。
たとえば、0.A6₁₆ は1未満です。
0.A6₁₆ ≒ 0.65₁₀
これを4倍すると約2.6なので、答えは次の範囲に入ります。
2以上3未満
整数部が1や3になっている選択肢は、細かな変換をする前に除外できます。
科目Bでどう使う?
科目Bでは、整数に対するシフト演算を含む疑似言語や処理を読むときに、同じ考え方を使います。
整数 x を左へnビットシフトする処理は、桁あふれが起きない範囲では、通常は2ⁿ倍に対応します。
xを左へ1ビットシフト
→ x × 2
xを左へ2ビットシフト
→ x × 4
たとえば、2進数 0011 は10進数の3です。
0011₂ = 3₁₀
左へ2ビット移動すると、
0011₂
↓ 左へ2ビット
1100₂
となります。
1100₂ = 12₁₀
3 × 4 = 12
プログラムを追うときは、次を確認します。
- 何ビット動かしているか
- 左シフトか右シフトか
- データのビット数に上限があるか
- 桁あふれや切捨てが起きないか
- 符号付き整数の場合、右シフトが論理シフトか算術シフトか
なお、小数を含む値では、プログラム内部の表現方法によって扱いが異なります。この記事の小数点移動は、数値として2のべき乗倍する原理を説明したものです。固定小数点数や浮動小数点数のビット列を、そのまま整数と同じ方法でシフトできるとは限りません。
よくある誤解・混同
誤解1:4倍なので16進数の小数点を右へ2桁動かす
16進数で小数点を右へ1桁動かすと16倍です。
16進数で右へ1桁
= 16倍
= 2⁴倍
したがって、右へ2桁では256倍になってしまいます。
4倍は2²倍なので、2進数に直して右へ2ビット動かします。
誤解2:2進数にした後、4桁動かす
16進数1桁が2進数4ビットだからといって、4倍で4ビット動かすわけではありません。
4ビット移動
= 2⁴倍
= 16倍
移動量は、16進数の桁数ではなく倍率から決めます。
4倍 = 2²倍
→ 2ビット移動
誤解3:16進数へ戻すとき、左端から4ビットずつ区切る
16進数へ戻すときは、小数点を基準に区切ります。
小数点から左へ4ビットずつ
小数点から右へ4ビットずつ
不足する部分には0を補います。
10.100110₂
↓
0010.1001 1000₂
誤解4:左シフトと小数点の移動を同じ見た目で考える
数値を2倍する説明には、次の2通りがあります。
小数点を右へ1ビット動かす
ビット列を左へ1ビット動かす
どちらも値を2倍する考え方ですが、動かしている対象が違います。
- 小数点移動:ビット列を固定して、小数点の位置を変える
- 左シフト:小数点の位置を固定して、ビット列を左へ動かす
「何を動かしているのか」を確認すると、方向を混同しにくくなります。
誤解5:右シフトなら必ず2ⁿで割った値になる
正の整数では、右へnビットシフトすると2ⁿで割った整数部分に対応します。
ただし、次の点には注意が必要です。
- 余りは切り捨てられる
- 負の数では論理シフトと算術シフトで結果が異なる
- 固定ビット数では、左シフト時に上位ビットが失われることがある
科目Bでは、データ型やシフト方法の条件も確認します。
まとめ(試験直前用)
- 16進数1桁は、2進数4ビットに対応する
- 2ⁿ倍では、2進数の小数点を右へnビット動かす
- 4倍は右へ2ビット、8倍は右へ3ビット
- 16進数へ戻すときは、小数点を基準に4ビットずつ区切る
- 左シフトでは、桁あふれ・切捨て・符号の扱いも確認する