2桁の2進数x_1x_2が表す整数をxとする。
2進数x_2x_1が表す整数を,xの式で表したものはどれか。
ここで,int(r)は非負の実数rの小数点以下を切り捨てた整数を表す。
正答3
解説
正解は3です。
2桁の2進数x_1x_2では、上の桁x_1が2の重み、下の桁x_2が1の重みをもちます。
桁を入れ替えたx_2x_1の値を、元の整数xだけで表せるかを考える問題です。
【計算】
元の値はx=2x_1+x_2です(x_1、x_2は0か1)。
x_2は0か1なので、x÷2の小数点以下を切り捨てるとx_1が残り、int(x/2)=x_1です。
x_2=x-2x_1と表せます。
入れ替えた値は2x_2+x_1です。
代入すると2(x-2x_1)+x_1=2x-3x_1です。
x_1をint(x/2)に戻すと2x-3int(x/2)になります。
確認として、x_1x_2=10(x=2)なら、入れ替えた01は1です。
2×2-3×int(2/2)=4-3=1となり、一致します。
【選択肢別解説】
1:× 2x+4int(x/2)は、x=2のとき4+4=8となり、正しい値の1になりません。
2:× 2x+5int(x/2)は、x=2のとき4+5=9となり、正しい値の1になりません。
3:○ 2x-3int(x/2)は、上の計算どおり2x_2+x_1と等しくなります。
x=0、1、2、3のすべてで0、2、1、3を正しく返します。
4:× 2x-4int(x/2)は、x=2のとき4-4=0となり、正しい値の1になりません。
【ポイント】
「int(x/2)は上位ビット」「x-2int(x/2)は下位ビット(2で割った余り)」という対応を押さえると、ビット操作の式は機械的に組み立てられます。
選択肢を絞るときは、x=2のように桁の入れ替えで値が変わる具体例を代入すると速く確かめられます。