基本情報技術者 2011年 秋期 午前(科目A) 問02
問題文
10進数-5.625を、8ビット固定小数点形式による2進数で表したものはどれか。ここで、小数点位置は3ビット目と4ビット目の間とし、負数には2の補数表現を用いる。

選択肢
ア:01001100
イ:10100101
ウ:10100110(正解)
エ:11010011
10進数-5.625を、8ビット固定小数点形式による2進数で表したものはどれか。小数点位置は3ビット目と4ビット目の間、負数には2の補数表現を用いる。【午前2 解説】
要点まとめ
- 結論:小数点が4ビット目と3ビット目の間のQ4.4表現で、-5.625は8ビットで10100110(ウ)となる。
- 根拠:固定小数点は値×で整数化、 を8ビット2の補数で表すと10100110になる。
- 差がつくポイント:小数点位置の解釈(Q4.4)とLSB(1/16)の扱いを誤らないことが合否を分ける。
正解の理由
正解: ウ(10100110)。手順は次の通りです。まず小数点位置が4分の1(Q4.4)なので、値を 倍して整数化します。
。絶対値90を2進数で表すと (+90)。負数は2の補数なのでビット反転して1を加えます:
反転 + 1 → 。これが8ビット固定小数点で表した -5.625 のビット列です。
。絶対値90を2進数で表すと (+90)。負数は2の補数なのでビット反転して1を加えます:
反転 + 1 → 。これが8ビット固定小数点で表した -5.625 のビット列です。
よくある誤解
- 小数点位置を間違える:小数点がQ4.4(上位4ビットが整数部)である点をQ3.5などと誤認すると桁がずれて誤答になります。
- 符号表現の混同:負数を表す際に2の補数でなく符号+絶対値(符号ビット)で処理すると誤ったビット列になります。
- 丸め誤差の見落とし:小数を固定小数点化する際、LSBが単位であることを忘れると0.0625単位の誤差を見逃します。
解法ステップ
- 問題の小数点位置を確認し、Q形式を決める(ここはQ4.4)。
- 表現したい値に を掛けて整数化する:。
- 絶対値の二進表現を求める:(8ビット)。
- 負数なので2の補数を取る:ビット反転 → 加算1 → 。
- 8ビットで表記し、最終的な固定小数点表現を得る。
選択肢別の誤答解説
- ア: 01001100
-> 、値は (正の4.75)。符号が正で桁も異なり全く別の値です。 - イ: 10100101
-> 2の補数で解析すると負数で、 は を表します。目的の -5.625 と ()違いで、LSBが一つ違う誤りです。 - ウ: 10100110(正解)
-> は 2の補数で を正確に表すため正解です。 - エ: 11010011
-> 、符号付きでは 、よって値は 。桁と符号の解釈で大きく異なります。
補足コラム
固定小数点(Qm.n)では表現値 =(符号付き整数)/ です。今回の小数点位置は「上位4ビットが整数部、下位4ビットが小数部」なので Q4.4。負数を直接作る別の方法として「目的の値を16倍し負の整数をそのまま8ビット2の補数で計算する」方法が実務的に早いです。参考の簡単な検算用コード例:
# -5.625 を Q4.4 で表す(8ビット2の補数)
v = -5.625
scaled = int(round(v * 16)) # -90
twos = (scaled + (1<<8)) & 0xff # 8ビット2の補数表現
print(f"{twos:08b}") # 出力: 10100110
FAQ
Q. 小数点位置が問題で明示されていなければどうする?
A. 問題文や図で必ず小数点位置(境界)が示されます。示されない場合は設問の前提を確認し、指定がないときは明言してから解答します。
A. 問題文や図で必ず小数点位置(境界)が示されます。示されない場合は設問の前提を確認し、指定がないときは明言してから解答します。
Q. なぜ を掛けるのか?
A. 小数点が4ビット分右にある(下位4ビットが小数部)ため、固定小数点表現では値×で整数化するのが基本です。
A. 小数点が4ビット分右にある(下位4ビットが小数部)ため、固定小数点表現では値×で整数化するのが基本です。
Q. 2の補数の求め方がわからないのですが?
A. 正のビット列を反転して1を加えるか、負の整数 を表現する場合は を8ビットで表すと同じ結果になります。
A. 正のビット列を反転して1を加えるか、負の整数 を表現する場合は を8ビットで表すと同じ結果になります。
関連キーワード: 固定小数点, 2の補数, Q4.4, ビット配置, 小数点位置, 2進数変換, LSB, 丸め誤差

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

