- ベストアンサー
ビットについて基本情報技術者試験でわからない問題があります
ある16ビットのデータを左に1ビットけた移動すると、あふれが生じ、得られた値は16進数で579Aとなった。元の値を16進数で表したものはどれか。 ア 2BCD イ 2F34 ウ ABCD エ AF34 答え ウ 解説には 579A を2進数に直し、右に1ビットけた移動、あふれが生じた分の先頭ビットを1とすると・・ とありますが、なぜ、勝手に先頭ビットを1としていいのかわかりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
左に1bitシフトした結果、579A 0101 0111 1001 1010 元に戻すのは右に1bit シフトする 0010 1011 1100 1101 あふれた先頭ビットを戻す。 1010 1011 1100 1101 ABCD です。 (桁)あふれがあった→意味のある変化があった→もう少し専門的にいうとキャリーを生じた ということは、元の先頭ビット(MSB)が1だったということです。勝手に先頭ビットを1にしているわけではありません。「あふれが生じ」という意味が先頭ビットが1ですよといっているのです。
その他の回答 (3)
- bug_bug
- ベストアンサー率78% (36/46)
"桁あふれ(オーバーフロー)"とは扱える数値の最大値を超えることを指します. 仮に回答が(ア)だとした場合, 1bit左シフトを行っても16bitで表記できる値に収まるため, "桁あふれした"とは言いません. 問題文に"あふれが生じ"とありますので, 1bit左シフトしてあふれが発生するためには, 元の値のMSB(先頭ビット)は"1"であることが必須となります.
579A これを16ビットで現すと、 0101 0111 1001 1010 右に1桁SHIFTすると 0010 1011 1100 1101 これをHEXで現すと 答え 2BCD ですね。 溢れは右の4ビットの先頭に移動していますね。 何か変ですか?
- kaz-a
- ベストアンサー率27% (132/480)
>先頭ビットを1としていいのかわかりません。 先頭が0でも桁あふれするのでしょうか?
補足
文が足りていませんでした。 答えは ウ の ABCD となっています。解説には、右に1桁シフトすると 0010 1011 1100 1101 となり、あふれが生じた分の先頭ビットを1とすると 1010 1011 1100 1101 となり答えは ABCD となります。 と書いてあります。なぜ、先頭部が0010ではなく、先頭ビットに勝手に1を補い1010としているのかが理解できないのです。