プロが教えるわが家の防犯対策術!

ある16ビットのデータを左に1ビットけた移動すると、あふれが生じ、得られた値は16進数で579Aとなった。元の値を16進数で表したものはどれか。

ア 2BCD
イ 2F34
ウ ABCD
エ AF34

答え ウ

解説には 579A を2進数に直し、右に1ビットけた移動、あふれが生じた分の先頭ビットを1とすると・・

とありますが、なぜ、勝手に先頭ビットを1としていいのかわかりません。

A 回答 (4件)

左に1bitシフトした結果、579A


0101 0111 1001 1010
元に戻すのは右に1bit シフトする
0010 1011 1100 1101
あふれた先頭ビットを戻す。
1010 1011 1100 1101
ABCD
です。
(桁)あふれがあった→意味のある変化があった→もう少し専門的にいうとキャリーを生じた
ということは、元の先頭ビット(MSB)が1だったということです。勝手に先頭ビットを1にしているわけではありません。「あふれが生じ」という意味が先頭ビットが1ですよといっているのです。
    • good
    • 0

"桁あふれ(オーバーフロー)"とは扱える数値の最大値を超えることを指します.


仮に回答が(ア)だとした場合, 1bit左シフトを行っても16bitで表記できる値に収まるため, "桁あふれした"とは言いません.

問題文に"あふれが生じ"とありますので, 1bit左シフトしてあふれが発生するためには, 元の値のMSB(先頭ビット)は"1"であることが必須となります.

参考URL:http://e-words.jp/w/E6A181E38182E381B5E3828C.html
    • good
    • 0

579A


これを16ビットで現すと、
0101 0111 1001 1010

右に1桁SHIFTすると
0010 1011 1100 1101

これをHEXで現すと
答え 2BCD  ですね。

溢れは右の4ビットの先頭に移動していますね。
何か変ですか?

この回答への補足

文が足りていませんでした。

答えは ウ の ABCD となっています。解説には、右に1桁シフトすると 0010 1011 1100 1101 となり、あふれが生じた分の先頭ビットを1とすると 1010 1011 1100 1101 となり答えは ABCD となります。

と書いてあります。なぜ、先頭部が0010ではなく、先頭ビットに勝手に1を補い1010としているのかが理解できないのです。

補足日時:2010/02/14 02:55
    • good
    • 0

>先頭ビットを1としていいのかわかりません。



先頭が0でも桁あふれするのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!