応用情報技術者試験 令和5年秋 午前問1 解説付き過去問
問題
2桁の2進数x1x2が表す整数をxとする。
2進数x2x1が表す整数を、xの式で表したものはどれか。
ここで、int(r)は非負の実数rの小数点以下を切り捨てた整数を表す。
正解
解説
この問題は、2桁の2進数のビットの並びを入れ替えた場合に、その値を元の値 x を使ってどのように表せるかを問うものです。以下の手順で詳しく解説します。
- 2桁の2進数の構造
2進数 x1x2 は、上位ビット x1 と下位ビット x2 から構成されます。これが表す10進数の値 x は、次のように表されます。x = 2 × x1 + x2
この式を2倍すると、次のようになります。
2x = 4 × x1 + 2 × x2 …①
- int(x2) の意味
x を 2 で割るということは、2進数で右に 1 ビットシフトする操作に相当します。例えば、x1x2 を右シフトすると、x1.x2 となり、小数点以下を切り捨てた値は x1 になります。
つまり、int(x2) = x1 …②
- ビットを入れ替えた場合の値
元の2進数 x1x2 のビットを入れ替えた x2x1 が表す10進数の値は、2 × x2 + x1 …③
- 式の変形と整理
①式の 2x = 4x1 + 2x2 から、3x1 を引くと、2x − 3x1 = x1 + 2x2(③式と一致)
②より、x1 = int(x2) なので、
2x − 3 × int(x2) が x2x1 を表す式となります。
- 別解:具体的な値を代入して確認
x1 = 1、x2 = 0 のとき:x = 2 × 1 + 0 = 2
x2x1 = 01(2) = 1(10)
int(22) = 1
2x − 3 × int(x2) = 4 − 3 = 1(確認一致)x1 = 1、x2 = 1 のとき:
x = 2 × 1 + 1 = 3
x2x1 = 11(2) = 3(10)
int(32) = 1
2x − 3 × int(x2) = 6 − 3 = 3(確認一致)
したがって、2進数 x2x1 が表す整数は、x を用いて表すと 2x − 3 × int(x2) となります。