負数を2の補数で表現する符号付き16ビットの2進数の問題について

このQ&Aのポイント
  • 負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示し、4倍するとあふれるものはどれか。
  • 16進数で表現した場合、負数と正数の2進数表現は異なる。
  • 問題の解き方については解説が異なるが、正しい解法は2の補数を使用すること。
回答を見る
  • ベストアンサー

問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示

問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF 以下は、それぞれを2進数表示にしたものです。 先頭の符号ビットは[0]の表記で目立たせてあります。 ア [0]001 1111 1111 1111 イ [1]101 1111 1111 1111 ウ [1]110 0000 0000 0000 エ [1]111 1111 1111 1111 以下は、4倍したもの ア [0]111 1111 1111 1100 イ [0]111 1111 1111 1100 ウ [1]011 0000 0000 0000 エ [1]111 1111 1111 1100 この場合は、ア以外は負数ですが、『負数を2の補数で表現する符号付き16ビットの2進数を、16進数で表現した場合』は16進数が正の数でも、2進数だと負数になると言う事でしょうか? また、符号付きでない場合は、上記はすべて正の数と言う事で合ってますか? 回答を見る感じでは16進数を2進数に変換しただけで、『2の補数で表現』の部分がないように思えます。この辺りも知りたいです。 問題の解き方についても疑問があります。 http://questionbox.jp.msn.com/qa4278151.html での回答では、 イ DFFF →(シフト前)1101 1111 1111 1111 →(シフト後)0111 1111 1111 1100 先頭ビットが1から0に変わったので「桁あふれ」。 問題集の回答ではこっちで説明されていました。 http://okwave.jp/qa/q4302488.html のANo2回答では (シフト前)[1]101 1111 1111 1111 (シフト後)[1]111 1111 1111 1100 2の補数表現による負の数の場合,シフト操作によって1が消えていくのは問題ない。 シフト操作によって0が消えると結果が変になる。これが「あふれ」 符号はシフトさせず、左に2つシフトさせた事で、10が消えた事で桁あふれとしています。 ANo1の回答では、 DFFFだと同様に 1101 1111 1111 1111で1の補数は 0010 0000 0000 0000 2の補数は 0010 0000 0000 0001 つまり、-8193ですよね。 4倍すると、-32772で、これは16ビットの2の補数表現 で表現できる数の範囲からあふれてしまいます。 DFFFなどの2進数に変換後、2の補数を使用するのが正しいのでしょうか? 最初の2つの回答では2の補数を使用していなかったので、疑問に思っています。 頭が混乱しております・・・。 回答宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.4

論理シフトと算術シフトの2種類を理解することは, 基本情報技術者試験の試験範囲に含まれています。 http://akademeia.info/index.php?%A5%B7%A5%D5%A5%C8%B1%E9%BB%BB データ型が符号なし整数や文字型であったなら論理シフトの動作になりますし, データ型が符号あり整数(2の補数)だったなら算術シフトの動作になります。 シフトによって正数が突然負数になったり,負数が突然正数になったりするのは異常な事態ですから,それを避けるために符号ビットを動かさない「算術シフト」が用いられます。 今回の問題は「負数を2の補数で表現する符号付き16ビットの2進数」と明記してありますから,その動作は算術シフトです。 よって,下記の私の解説が正しいです。 > http://okwave.jp/qa/q4302488.html のANo2回答

ipyodora
質問者

お礼

お礼が遅くなりすいませんでした。 回答ありがとうございました。

その他の回答 (4)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.5

「ANo.1のお礼」に対して。 ア 1FFF(8191)←これだけが正解。 イ DFFF (1101 1111 1111 1111)  →負の数(先頭ビットが1)なので,どんな数かそのままでは不明。   ビット反転の後+1して正数にすれば,どんな数か判明する。  →0010 0000 0000 0001(=8193)  →よって元の数は「-8193」 ウ E000 (1110 0000 0000 0000)  →負の数(先頭ビットが1)なので,どんな数かそのままでは不明。   ビット反転の後+1して正数にすれば,どんな数か判明する。  →0010 0000 0000 0000(=8192)  →よって元の数は「-8192」 エ FFFF (1111 1111 1111 1111)  →2の補数表現において,オール1のパターンは「-1」   (納得いかなければ,ビット反転の後+1して確認してください) >紹介されたサイトには1000 0000(2進法)は >-127(10進法)と書いていましたが、-128で合ってますか? いいえ,あわてずに最後まで読めば,リンク先には-128と書いてあります。 1の補数を解説した途中の箇所を間違えて参照しているのでしょう。

ipyodora
質問者

お礼

お礼が遅くなりすいませんでした。 何度もご丁寧に説明していただきありがとうございました。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

質問文の中で紹介されていた > http://okwave.jp/qa/q4302488.html のANo2回答 の回答者本人です。 細かい個々のご質問に対してはいまから回答していきますが, 結論から言うと私の解説が正しいです。自信があります。 >16進数が正の数でも、2進数だと負数になると言う事でしょうか? これは質問がおかしい。コンピュータにとって自明的に存在するのは単に「ビット列」であって,正数なのか負数なのかは解釈の違いでしかないので。 例えば次のような16ビット長のデータがあるとします。   1111 1111 1111 1111 これは,符号なし整数と解釈すれば65535ですし,符号あり整数(2の補数)と解釈すれば-1です。画素と解釈すればある色が最大の輝度で光っている状態でしょうし,命令と解釈すればある動作をする命令コードを表しているでしょう。 ですから「1111 1111 1111 1111」というビット列だけ与えられて, 「これは符号なし整数か? それとも符号あり整数(2の補数)か?」という問いに答えるのは不可能です。 >回答を見る感じでは16進数を2進数に変換しただけで、 >『2の補数で表現』の部分がないように思えます。 まったくそのとおりで,16進というのは「2進を4ビットずつまとめて0~Fの1文字に変換しただけ」のものです。16進数だけを見て,それが符号なしか符号ありかを判断することは不可能です。 問題文に「負数を2の補数で表現する」と解釈のための前提が与えられてはじめて, 16進数の最左桁が0~7(0000~0111)なら正数であるし,8~F(1000~1111)なら負数であると判断できます。よって, > 符号付きでない場合は、上記はすべて正の数と言う事で合ってますか? 合っています。

ipyodora
質問者

お礼

お礼が遅くなりすいませんでした。 回答ありがとうございました。

  • e3tatsu
  • ベストアンサー率51% (78/151)
回答No.2

ア 8191 イ -8193 ウ -8192 エ -1 「2の補数」表現からやり直してください。

noname#115788
noname#115788
回答No.1

おそらく、ipyodoraさんは ア 1FFF イ DFFF ウ E000 エ FFFF が、十進数でいくつなのか判っていらっしゃらないのでは? それが判っていれば、過去の質問の回答が理解できるはずです。 試験問題を解く以前にそれが判らないと全く先に進めないので まず、その基本的なところをおさえて置かないと駄目なのでは? ヒントとして 2の補数の定義から、最上位のビットが立っている場合には 2の補数+A = 0000 (キャリー 1) となる値Aの負数(ーA)が十進数の値になります。 ちょうどいいサイトが見つかったので http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fusu.htm をみて考えてみましょう。

ipyodora
質問者

お礼

()は十進数 ア 1FFF(8191) イ DFFF(-24575) ウ E000(-28671) エ FFFF(-32767) 問に『負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示』となっているので、各ア~エの16進数を2進数に変換した時の最上位のビットは符号ビットとして考えて、この値になりました。合ってますでしょうか? なんだか、混乱から抜け出せませんでした。紹介されたサイトには1000 0000(2進法)は-127(10進法)と書いていましたが、-128で合ってますか? むずかしいです・・・。自分でもびっくりする程分かりません・・・。

関連するQ&A

  • 2の補数の問題

    お世話になります。 初歩的な質問で申し訳ございませんが、質問させてください。 ------------------------------------------------------------- 問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF ------------------------------------------------------------- 答えはイなのですが、イマイチです。 とある解説だと、4倍すると符号が変わるものがあふれとのことでした。 DFFF →(2の補数)0010 0000 0000 0001 →(4倍する)1000 0000 0000 0100 確かに符号が変わることは分かるのですが、ウでも E000 →(2の補数)0010 0000 0000 0000 →(4倍する)1000 0000 0000 0000 こちらも符号が変わることにはならないのでしょうか? どうぞよろしくお願いいたします。

  • 桁あふれがわかりません

    負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち,4倍するとあふれが生じるものはどれか。 ア 1FFF   イ DFFF   ウ E000   エ FFFF (平成19年春 問3) この問題の解説は以下の通りです。 DFFFの2進数表示は、1101 1111 1111 1111 で、4倍すると0111 1111 1111 1100 となり、負数が正数になるのであふれが生じる。 このように書いてありました。 1つ目の質問は、4倍すると1111 1111 1111 1100 となり、正数にはならないのではないか、ということです。 2つ目の質問は、直接この問題には関係ないかもしれないのです。 「元の数が負数のとき、左シフトで0が消えたとき、桁あふれという」と習ったのですが、なぜ0が消えると桁あふれとなるのでしょうか。 以上です。宜しくお願い致します。

  • 基本情報の問題にて

    負数を2の補数で表現する符号付き16ビットの2進数を16進数で表示したもののうち、4倍するとあふれが生じるものはどれか。  ア  1FFF  イ  DFFF  ウ  E000  エ  FFFF という問題なのですが、 正解はイです。 理由としては、4倍すると0111 1111 1111 1100になり負数が正数になるので、あふれが生じる。という理由だそうです。 ここで、わからないのですがなぜ負数が正数になるとあふれが生じていることになるのでしょうか。 そもそも、あふれとは最上位の位ここでいう2進数の1が左にはみ出ればすべてあふれというのだと認識していました。なので、ここでいえばイ、ウ、エすべてあふれになると思ってしまいます。 上記のようにかなりごちゃごちゃになっているのですが、よろしくお願いします。

  • 8ビットを2進数で表現すると…

    質問です。 符号付の整数を8ビットの2進数で表現するとき、00110111-11000001の演算結果はどのようになるのでしょうか? 符号ビットは左端にあり、負数は2の補数で表します。

  • 基本情報技術者

    負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち,4倍するとあふれが生じるものはどれか。 ア 1FFF   イ DFFF   ウ E000   エ FFFF (平成19年春 問3) この問題の解説で E000の2進表示は1110 1111 1111 1111と書いてありました。 どの問題集を見てもそうかいてあります。 1110 0000 0000 0000ではないんですか?? またあふれがでるっていうのはどういうことなんですか? いまいちよくわかりません。

  • この問題がわかりません

    基本情報試験の過去問をやっているのですが、よく理解できなかったので、解説をお願いします。 ●負数を2の補数で表す 16 ビットの符号付き固定小数点数の最小値を表すビット列を, 16 進数として表したものはどれか。 ア 7FFF    イ 8000    ウ 8001    エ FFFF これの答えはイだそうで、説明では「ア~エの16進数をそれぞれ、2進数、10進数、10進数の絶対値に変換して評価する。」とあり表が載っています。 ア・0111111111111111・・・+32767・・・絶対値が32767 イ・1000000000000000・・・ー32768・・・絶対値が32768 ウ・1000000000000001・・・ー32767・・・絶対値が32767 エ・1111111111111111・・・-1・・・・・・・絶対値が1 これでは、イとウ、エがーの符合になっていますが、なぜそうなるのか、基数変換した時の値はどうやって出しているんでしょうか? 回答よろしくお願いします。

  • 基本情報技術者過去問

    1)負数を2の補数で表す8ビットの数値がある。この値を10進数で表現すると-100である。この値を符号なしの数値として解釈すると、10進数で幾らか? ア)28 イ)100 ウ)156 エ)228 2) 多くのコンピュータが、演算回路を簡単にするために補数を用いている理由はどれですか。 ア)加算を減算で処理できる イ)減算を加算で処理できる ウ)乗算を加算の組み合わせで処理できる エ)除算を減算の組み合わせで処理できる

  • 符号付の整数8ビット…

    教えてください。 符号付整数8ビットの2の補数で表現するときの11101111-11110011の計算を2進数で示すときの途中の計算方法を教えてください。 10進数のー13を8ビットの固定小数点(負数は2mの補数形式)の途中の計算方法も教えてください。

  • 1の補数表現

    昔の本を買って情報処理の勉強をしているのですが ふに落ちない事がありまして質問させていただきます。 符号付の整数を8ビットの2進数であらわす時、1の補数表現で最小の数は-128である。 と言う問題がありまして回答が正しいとなっていました。 しかし自分は-127までしか表現できないと思いまして。。。 2の補数表現なら-128~127まで表現できると思うのですが 1の補数表現なら-127~127までしか表現できないと思います。 詳しい方がいましたらよろしくお願いします。

  • 基本情報技術者試験の問題(進数変換)

    基本情報技術者試験の過去問を解いてるのですが、どうしても分からないんです。 以下原文 負数を2の補数で表現する符号付き16ビットの2進数を16進数で表記したもののうち、四倍するとけた あふれが生じるものはどれか。 不明な点は選択肢にあるDFFFという16進数表記が10進数にすると「-8193」になると解説に書いてある点です。DFFFを2進数にする方法は分かるのですが…。 よろしくお願いいたします。

専門家に質問してみよう