記数法:ステップごとの解答つき練習問題

図、ヒント、詳しい解答つきの無料の記数法練習問題。毎回新しい数値で、3 つのレベル:2 進数・16 進数から 10 進数へ, 2 の補数, ビット、範囲、メモリ。

無料の練習問題やさしい
ビットをクリックして設定します012806403201608040201

8 ビットのレジスタが 0x99 を保持するようにビットを設定します。このパターンの値 N は 10 進でいくつですか?

0x99

ビットをクリックすると、0 と 1 が切り替わります。ボックスにはパターンが符号なしの数として表示され、直接入力もできます。 正確な答え:整数で、四捨五入はしません。

次の問題 →
記数法を無料で練習今すぐ記数法を練習毎日 5 問まで無料。カード登録は不要です。

練習する内容

  1. やさしい2 進数・16 進数から 10 進数へ
  2. ふつう2 の補数
  3. むずかしいビット、範囲、メモリ

重要な公式

位取り
2 進数 2k、8 進数 8k、16 進数 16k
10 進数へ
Σ dk·bk
10 進数から
基数で割り、余りを下から上へ読む
16 進数 ↔ 2 進数
16 進数 1 桁 = 4 ビット
2 の補数
ビットを反転して 1 を足す

記数法をゼロから学ぶ

1記数法とは

日常生活では、10 進法(基数 10)で数えます。数字は 0 から 9 までの 10 個で、各桁は右隣の桁の 10 倍の値をもちます。

352 では、3 は 300、5 は 50、2 は 2 を表します。右から順に、各桁の重みは 1、10、100 です。

352 = 3 · 100 + 5 · 10 + 2 · 1

コンピュータは、すべてをオンとオフのスイッチとして記憶します。そのため、数字が 0 と 1 だけの2 進法(基数 2)で数えます。

2 進数の 1 桁をビットといいます。8 ビットのまとまりがバイトです。

規則はどの基数でも同じです:各桁は、その数字の値に基数のべき乗を掛けた値を表します。

セルフチェック 10 進数 4721 で、7 はいくらを表すか。
  1. 7000
  2. 700
  3. 70
  4. 7

答え: 700. 右から数えると、各桁の重みは 1、10、100、1000 です。7 は 3 桁目にあるので、7 · 100 = 700 を表します。

22 進数と 16 進数

2 進数では、右から各桁の重みが 1、2、4、8、16、… となります。各桁は右隣の桁の 2 倍の値です。

8 ビットの数では、各桁の重みは 128、64、32、16、8、4、2、1 です。

012806413211608041201

2 進数を読むには、1 になっているビットの重みをすべて足します。0011 0010 なら 32 + 16 + 2 = 50 です。

ビットが長く並ぶと読みにくくなります。プログラマーは代わりに、16 進数(hex、基数 16)で書くことがよくあります。

16 進数には 16 個の数字が必要です。0 から 9 に続いて、アルファベット A = 10、B = 11、C = 12、D = 13、E = 14、F = 15 を使います。

16 進数の各桁の重みは、右から 1、16、256、4096 です。16 進数は、たとえば 0x2F のように、先頭に 0x をつけて書くことがよくあります。

16 進数の 1 桁は、ちょうど 4 ビットです。したがって 0011 0010 は 0x32 です:0011 が 3、0010 が 2 です。

セルフチェック 0x1A を 10 進数で表すといくらか。
  1. 110
  2. 11
  3. 161
  4. 26

答え: 26. A = 10 です。桁の重みは 16 と 1 なので、1 · 16 + 10 · 1 = 26 です。数字を並べて書く(110)、あるいは足す(11)のは、桁の重みを無視しています。161 は桁の順序を逆にしています。

3負の数:2 の補数

すべての桁が正の重みをもつ 1 バイトは、0 から 255 を記憶します。これを符号なしといいます。

負の数を記憶するために、コンピュータは2 の補数を使います。違いは、最上位ビットの重みが +128 ではなく −128 になる点だけです。

1−12806403201608041211

したがって 1000 0011 は −128 + 2 + 1 = −125 です。最上位ビットは符号ビットと呼ばれ、これが 1 のとき、その数は負です。

8 ビットの 2 の補数は、−128(1000 0000)から +127(0111 1111)までを表します。

負の数 −x を書くには、2 進数の +x から始めて、すべてのビットを反転し(0 は 1 に、1 は 0 に)、1 を加えます。

−5 の例:5 は 0000 0101 です。反転すると 1111 1010 です。1 を加えると 1111 1011 になります。

同じビットパターンを符号なしとして読むと、値は 256 − x です。−5 なら 251 で、1111 1011 は確かに 128 + 64 + 32 + 16 + 8 + 2 + 1 = 251 です。

セルフチェック 8 ビットのパターン 1111 1111 は、2 の補数の数を表している。その値はいくらか。
  1. 255
  2. −127
  3. −128
  4. −1

答え: −1. −128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = −1 です。255 は符号なしとして読んだ場合の値です。−127 は、最上位ビットを 111 1111 の前のマイナス記号として扱った場合の値です。

4ステップごとの方法

2 進数または 16 進数から 10 進数へ:

  1. 各桁の下に桁の重みを書きます:2 進数なら 2 のべき乗、16 進数なら 16 のべき乗を、右端の 1 から始めて書きます。
  2. 16 進数では、文字をそれぞれの値に置き換えます:A = 10 から F = 15 まで。
  3. 各桁にその桁の重みを掛け、すべてを足します。

2 の補数:

  1. ビットパターンを読むには、最上位ビットの値を −128(8 ビットの場合)とし、1 のビットの重みをすべて足します。
  2. −x を書くには、+x を 8 ビットで書き、すべてのビットを反転して 1 を加えます。
  3. そのパターンを符号なしとして読んだ値は 256 − x です。これでビットの確認ができます。

ビット、範囲、メモリ:

  1. n ビットで 2ⁿ 通りのパターンが表せます。
  2. 符号なしでは 0 から 2ⁿ − 1 を表します。2 の補数では −2ⁿ⁻¹ から 2ⁿ⁻¹ − 1 を表します。
  3. k 個の項目にそれぞれ固有のコードを与えるには、2b ≥ k となる最小の b を求めます。
  4. メモリでは、項目数に 1 項目あたりのビット数を掛け、バイトにするには 8 で、KiB にするには 1024 で割ります。
M = 幅 × 高さ × 1 ピクセルあたりのビット数 / 8 / 1024 (KiB)

5例題

すべてのステップをたどりましょう。開く前に次のステップを予想してみましょう。

例題

8 ビットのパターン 1011 0110 は、2 の補数で符号つき整数を表している。その 10 進数の値 N を求めよ。

1

桁の重みを書く

1−12806413211608141201

2 の補数では、最上位の桁の重みは −128 です。他の桁は 64、32、16、8、4、2、1 です。

2

符号ビットを見る

最上位ビットは 1 なので、この数は負です。

3

1 のビットを足す

1 のビットは、−128、32、16、4、2 の桁にあります。

N = −128 + 32 + 16 + 4 + 2 = −74
4

符号なしの値で確認する

符号なしとして読むと、このパターンは 128 + 32 + 16 + 4 + 2 = 182 です。

負の数では符号なしの値が 256 − x なので、x = 256 − 182 = 74 です。これでもやはり N = −74 になります。

5

反転して確認する

1011 0110 を反転すると 0100 1001 になり、1 を加えると 0100 1010 になります。

0100 1010 は 64 + 8 + 2 = 74 です。したがって元のパターンは −74 です。

答え

N = −74

6よくある間違い

  • ビットを反転した後に 1 を加え忘れる。結果が 1 小さくなります。
  • 2 の補数のパターンを符号なしとして読む。たとえば 1111 1111 を −1 ではなく 255 と読んでしまう。
  • 符号ビットを、他のビットの前にあるマイナス記号として扱う。2 の補数では、その重みは −128 です。
  • 桁の重みを逆の順序で書く。重み 1 の桁は常に右端です。
  • 16 進数で A = 11 とする。文字は A = 10 から始まります。
  • メモリの問題で、ビットとバイトを混同する。ビット数を 8 で割ります。
セルフチェック −5 を 8 ビットの 2 の補数のパターンで表すと何か。
  1. 0000 0101
  2. 1000 0101
  3. 1111 1010
  4. 1111 1011

答え: 1111 1011. 5 は 0000 0101 です。反転すると 1111 1010、1 を加えると 1111 1011 です。1111 1010 は 1 を加え忘れており、1000 0101 は 5 の前にマイナス記号をつけています。

7試験問題の例

  • やさしい:2 進数・16 進数から 10 進数へ。8 ビットの 2 進数、または 3 桁の 16 進数を 10 進数に変換します。
  • ふつう:2 の補数。符号つき 8 ビットのパターンの値を読む、または負の数をパターンで書いてその符号なしの値を答えます。
  • むずかしい:ビット、範囲、メモリ。n ビットに収まる最大値や最小の(絶対値が最大の負の)値、k 個のコードに必要なビット数、画像が占めるメモリを求めます。

むずかしい問題の例:256 × 256 の画像で 1 画素あたり 24 ビットなら、256 · 256 · 24 / 8 / 1024 = 192 KiB を占めます。

セルフチェック 375 個の項目にそれぞれ固有のコードを与える最小のビット数はいくつか。
  1. 188
  2. 512
  3. 8
  4. 9

答え: 9. 2⁸ = 256 ではコードが足りず、2⁹ = 512 なら足りるので、9 ビットです。512 はコードの数であって、ビット数ではありません。

アプリでステップごとに学ぶアプリでステップごとに学ぶ

解答例

例題 1やさしい
桁の重み2256B16E1

16 進数 0x2BE を 10 進数に変換しなさい。N を求めなさい。

0x2BEA = 10 … F = 15

求めるもの: N

ヒントを表示
  1. 16 進数の各桁の重みは右から 1、16、256、4096 です。
  2. 文字をその値(A = 10 … F = 15)に置き換え、桁の重みを掛けて合計します。
  3. 2 = 2, B = 11, E = 14.
答えとステップごとの解答を表示

位取り記数法:各桁の値は、その数字に基数のべき乗を掛けたものです。2 進数では各桁の重みが 1、2、4、8、16、…、16 進数では 1、16、256、… で、A–F は 10–15 を表します。8 ビットの 2 の補数では、最上位ビットの重みが +128 ではなく −128 になり、こうして負の数を表します。

各桁に桁の重みを掛ける

2·256 + 11·16 + 14·1 = 702

答え

0x2BE = 702
例題 2ふつう
8 ビットの 2 の補数0−12806403201608040201

8 ビットの 2 の補数で −45 を格納するようにビットを設定します。符号なしの数として読むと、このパターンの値 U はいくつですか?

N = −458 bit

求めるもの: U

ヒントを表示
  1. 45 を 2 進で書き、すべてのビットを反転して、1 を足します。
  2. 45 = 0010 1101₂.
  3. 符号なしの数としては、パターンは 256 + N に等しくなります。
答えとステップごとの解答を表示

ビットの設定:各ビットは 2 のべき乗(128、64、…、1)の値をもちます。16 進の 1 桁はちょうど 4 ビットで、8 ビットの 2 の補数では、いちばん左のビットの値は −128 です。ビット演算は、各ビット位置を別々に扱います。

反転して 1 を足す

45 = 0010 1101
反転後: 1101 0010
+1 → 1101 0011

符号なしとして読む

1101 0011₂ = 256 − 45 = 211

答え

U = 211
例題 3むずかしい
ビットをクリックして設定します012806403201608040201

ビットを 0111 0001 >> 3 の 8 ビットの結果に設定します。結果の値 R は 10 進でいくつですか?

0111 0001>> 3

求めるもの: R

ヒントを表示
  1. 3 だけ右にシフトすると、すべてのビットが 3 桁右へ動きます。右端からはみ出したビットは失われ、左側には 0 が入ります。
  2. ビット位置を 1 つずつ、左から右へ処理します。
  3. 結果の最初の 4 ビットは 0000 です。
答えとステップごとの解答を表示

ビットの設定:各ビットは 2 のべき乗(128、64、…、1)の値をもちます。16 進の 1 桁はちょうど 4 ビットで、8 ビットの 2 の補数では、いちばん左のビットの値は −128 です。ビット演算は、各ビット位置を別々に扱います。

ビットごとに

3 だけ右にシフトすると、すべてのビットが 3 桁右へ動きます。右端からはみ出したビットは失われ、左側には 0 が入ります。

0111 0001 >> 3
= 0000 1110

結果の値

0000 1110₂ = 14

答え

R = 14

質問と回答

記数法とは?

日常生活では、10 進法(基数 10)で数えます。数字は 0 から 9 までの 10 個で、各桁は右隣の桁の 10 倍の値をもちます。

352 では、3 は 300、5 は 50、2 は 2 を表します。右から順に、各桁の重みは 1、10、100 です。

記数法の問題の解き方は?(手順)

位取り記数法:各桁の値は、その数字に基数のべき乗を掛けたものです。2 進数では各桁の重みが 1、2、4、8、16、…、16 進数では 1、16、256、… で、A–F は 10–15 を表します。8 ビットの 2 の補数では、最上位ビットの重みが +128 ではなく −128 になり、こうして負の数を表します。

記数法の練習では何を学ぶ?
  • やさしい: 2 進数・16 進数から 10 進数へ
  • ふつう: 2 の補数
  • むずかしい: ビット、範囲、メモリ

問題ごとに数値が変わるので、答えではなく解き方が身につきます。 行き詰まったら、まず小さなヒントを開き、必要なときだけ詳しい解説を見ましょう。

練習のしかた

  • 問題ごとに数値が変わるので、答えではなく解き方が身につきます。
  • 行き詰まったら、まず小さなヒントを開き、必要なときだけ詳しい解説を見ましょう。
  • 進捗、間違えた問題、保存した問題は記録されるので、試験前に復習できます。

このトピックの前後のトピック

次に学ぶ

計算ツール

このトピックを含む科目

コンピュータサイエンスのほかのトピック

印刷用ワークシート

記数法を無料で練習今すぐ記数法を練習毎日 5 問まで無料。カード登録は不要です。