基本情報技術者 学習ページ|科目B・基礎理論

数をプログラムで扱う

2進数や16進数は、プログラムでは除算の商と余りに置き換えて考えると追いやすくなります。補数や論理演算も、各桁で何が起きているかを小さな処理に分けて確認します。

2進数へ変換する

10進の正の整数を2進数へ直すときは、2で割った余りを下位の桁から順に求めます。例えば13なら、13 mod 2は1で、次に13 ÷ 2の商である6を同じように処理します。

この処理を値が0になるまで繰り返すと、余りは下位ビットから得られます。modで桁を取り出し、整数の商で次の桁へ進むという形は、基数変換をプログラムにしたときの基本です。

2進数の各桁は2で割った余りから得る。

16進数を考える

16進数では、一つの桁が0から15までの値を表します。整数を16で割った余りを順に求めれば、2進数への変換と同じ考え方で各桁を取り出せます。

余りが10から15のときは、表示上はAからFに対応させます。プログラムでは、まず0から15の数値として扱い、必要に応じて表示用の文字へ対応付けると処理を分けやすくなります。

16進数も16で割った余りを下位桁から求める。

2の補数を読む

固定長の2進数では、負の整数を2の補数で表せます。8ビットの2の補数で表せる範囲は-128から127までなので、-xを表せるのはxが1以上128以下のときです。その範囲では、256-xを8ビットの値として書く方法でも求められます。

例えば-5を8ビットで表す値は、10進で読むと251(2進で11111011)です。ビット数が変われば基準となる値も変わるので、何ビットの表現かを先に確認します。

固定長では表現できる値の一周分を利用して負数を表す。

論理演算を判定する

論理積は二つとも真のとき、論理和は少なくとも一方が真のときに真になります。排他的論理和は、一方だけが真のときに真になります。

0と1の配列を扱う問題では、各位置を比較して論理演算の結果を求める形に置き換えられます。排他的論理和は二つの値が異なるかどうかと考えると、条件式を書きやすくなります。

排他的論理和は二つの真偽が異なるとき真になる。

条件を組み合わせる

複数の条件を扱うときは、andとorの意味を一つずつ確認します。例えば、値が0以上かつ9以下という条件は、二つの比較がともに成立する必要があります。

notを含む式では、どの条件を否定しているかを先に区切ります。複雑な条件式は、途中の真偽を表にして確認すると、分岐で選ばれる処理を追いやすくなります。

複合条件は小さな真偽条件に分けて追う。

本番の形で解いてみる

科目Bの形: プログラム(擬似言語)を読んで解答群から選ぶ(このページのために作った問題)

次のプログラム中の【a】、【b】に入れる正しい答えの組合せを、解答群の中から選べ。関数bitCountは、0以上の整数xを2進数で表したときの1の個数を返す。

 1○整数型: bitCount(整数型: x)
 2  整数型: count ← 0
 3  while (x > 0)
 4    if (a)
 5      count ← count + 1
 6    endif
 7    b
 8  endwhile
 9  return count
  1. a: x mod 2 = 1 b: x ← x ÷ 2 の商
  2. a: x mod 2 = 0 b: x ← x ÷ 2 の商
  3. a: x mod 2 = 1 b: x ← x - 2
  4. a: x mod 2 = 0 b: x ← x - 1
  5. a: x > 1 b: x ← x ÷ 2 の商
答えと解説を見る

正解: a: x mod 2 = 1 b: x ← x ÷ 2 の商

2で割った余りが1なら、現在の最下位桁は1です。その後、2で割った整数の商へ更新すると、次の桁を同じ方法で調べられます。

まちがえやすい点: 余りを調べた後は2を引くのではなく、2で割った商へ進める。

科目Bの形: プログラム(擬似言語)を読んで解答群から選ぶ(このページのために作った問題)

次のプログラム中の【a】に入れる正しい条件式を、解答群の中から選べ。二つの整数型配列a、bは要素数が等しく、各要素は0又は1である。関数diffBitsは、二つの配列で値が異なる位置の個数を返す。

 1○整数型: diffBits(整数型の配列: a, 整数型の配列: b)
 2  整数型: count ← 0
 3  整数型: i
 4  for (i を 1 から aの要素数 まで 1 ずつ増やす)
 5    if (a)
 6      count ← count + 1
 7    endif
 8  endfor
 9  return count
  1. a: a[i] ≠ b[i]
  2. a: a[i] = 1 and b[i] = 1
  3. a: a[i] = 0 and b[i] = 0
  4. a: a[i] = 1 or b[i] = 1
  5. a: a[i] = b[i]
答えと解説を見る

正解: a: a[i] ≠ b[i]

排他的論理和と同じ考え方で、一方だけが1の位置を数えます。0と1だけを取る二つの値では、値が異なるという条件でまとめて表せます。

まちがえやすい点: 論理和では両方が1の位置も真になるので、異なる位置だけを数えられない。

科目Bの形: プログラム(擬似言語)を読んで解答群から選ぶ(このページのために作った問題)

次のプログラムを実行したとき、出力される値の並びとして正しいものを解答群の中から選べ。出力は上から順に並べるものとする。

 1整数型: x ← 44
 2while (x > 0)
 3  x mod 2 を出力する
 4  x ← x ÷ 2 の商
 5endwhile
  1. 0, 0, 1, 1, 0, 1
  2. 0, 0, 1, 1, 0
  3. 1, 0, 1, 1, 0, 0
  4. 0, 0, 1, 0, 1, 1
  5. 1, 1, 0, 0, 1, 0
答えと解説を見る

正解: 0, 0, 1, 1, 0, 1

44を2で割った余りから順に、0、0、1、1、0、1となります。これは2進表現101100を下位桁(右端)から順に取り出した並びです。

まちがえやすい点: 余りは2進表現の左端からではなく、右端の桁から得られる。上から読んだ1, 0, 1, 1, 0, 0と取り違えない。

基本情報の学習ページ

ほかの学習ページの一覧と、2択の用語カード(750語)は、基本情報技術者のページにあります。

基本情報技術者のページへ →

このページの内容は、IPA「基本情報技術者試験 シラバス Ver.9.2」(2026年1月公表)と試験要綱Ver.5.6の範囲にもとづきます(2026年10月確認)。IPAは2027年度春ごろから新しい試験制度に移る予定です。