• ベストアンサー

今の私には理解が難しいので、伺います。

" http://情報処理試験.jp/FE22b-pm/t08.html "の正解を見ますと、 「(c)の枠に『イ』の値が入る」、という事情が分かりますが、 其の解答の根拠が当該ページには載せられていませんので、 理由が分かりませんから、畏れ入りますが、教えて下さい。 ■プログラム2へも算術シフトが適用されていますので、 符号ビットの値がずれてくるのでしょうから、 (c)の枠には『カ』の値が入るのではないでしょうか?

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

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

基本情報技術者 平成22年 秋期 午後 問8 > 〔プログラム2〕 > (6)▲Rのビット番号1のビットが1 かつ Rのビット番号0のビットが0 > (7)|・Rのビット番号9~5の内容からMの値を減算 より, > 図3 > R 00000001[10]←(6) > M 11011 において,Rの番号9~5「00000」からM「11011」を減算した結果は, Mが負数(2の補数)なので,  「00000」-「11011」(ちなみに10進数では,0-(-5) ) =「00000」- 負の数 =「00000」+ 正の数 =「00000」+「11011 をビット反転して+1」 =「00000」+「00101」(ちなみに10進数では,0+5 ) =「00101」 よって,空欄[c]および その前に登場する2箇所の網掛け部分の符号ビットは1ではなく0です。

SakuraiMisato
質問者

補足

有り難う御座います。 "0-(-5)"の説明で納得を致しました。 自分の成長の為に、 一度も学んでいない分野に挑戦しよう、 と私は考えて参りましたので、 酷く拙いレベルの質問ばかりを乱発しまして畏れ入りますが、 更に下記のページでも御教授を賜れませんでしょうか? http://okwave.jp/qa/q7741261.html

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 試験実施日近くの悪足掻きです。

    下記ページの設問2の(b)の正解が(カ)の値である、 という事情の根拠を教えて頂けませんでしょうか? http://情報処理試験.jp/FE15a-pm/t05.html

  • ビットシフトについて

    12ビットのデータ(符号付き)を16ビットのデータに変換したいです。 自分なりに考えたのですが・・・ 最上位ビット(符号を表すビット)の位置が違うので左に4ビットシフト、 右に4ビットシフトします(どちらも算術シフトとします) 例  0000 1011 1101 0101 (12bit のデータ) →1011 1101 0101 0000 (左にシフト) →1111 1011 1101 0101 (右にシフト) こうするとたしかに16ビットのデータの最上位ビットには12ビットのデータの符号が 反映されるように思えるんですが、符号を除いた値そのものが変わってしまいますよね? どうしたらいいでしょうか 切羽詰まってて文章めちゃくちゃで分かりづらいかとは思いますが、解答よろしくお願いします。

  • 算術シフトの方法

    1101(=-3)を算術シフトで1ビット右シフトしたときの結果についてご質問いたします。 この算術シフトを私が計算すると、1110 (=-2)となってしまいます。 しかし、本当は-3の1/2で、1111(=-1)と余りになるはずですよね? なぜ計算が正しくできないのか教えてください。 上記計算は、手持ちの本を参考に、以下のようにして行いました。 (1)1101の符号ビットを残して、右に1ビットシフト (2)空いたスペースに符号ビットを挿入し、1110を得る

  • 算術シフトしたら、あれ?

    16進数ので各4ビット(4桁)で2進数で算術シフトしますが、符号部はぬいて元の16進数に戻すのですか?でもそうすると元の数より大幅に減ってしまいますよね。例題の 例題・A4A6(16)を2ビット算術シフトする。 A4A6(16)=1010 0010 1010 0110 (2) ・左へ2ビットシフトする。 1000 1010 1001 1000(2)=A98(16) ・右へ2ビットシフトする。 1110 1000 1010 1001(2)=8A9(16) というように、符号部ぬかしたら増えるはずが減ったり、減るはずが増えたりと。なんか変ですよね。 ちなみに符号部すべて入れて考えたら、 左へ算術シフト 8A98(16) 右へ算術シフト E8A9(16) 増えるはずが減って、減るはずが増えるというあべこべになってしまいます。 超基本的ことなんですが、なぜか本に記載されていなかったので書きました。ご協力ください。

  • 算術シフトについて

    基本的なことで申し訳ないのですが、コンピューターのシフト演算命令において、算術右シフトでは、なぜ「符号ビット」と同じビットを空いたビットに補充することになるのでしょうか?

  • ■ 文字コードの出力について ■

    符号付char型の変数「moji」に文字を代入し、その文字コードの上位4ビットと下位4ビットをそれぞれAND演算でビットを抽出し、算術右4シフトと算術左4シフトで処理して元の上位4ビットと下位4ビットを入れ替えて文字コードを出力するC言語プログラムです。 例えば、「A」の文字コード「41」を「14」で出力します。 問題は「N」です。 「N」の文字コードは「4E」です。これを「E4」に変えて出力したいのですが、「ffffffe4」となってしまいます。 解決策は、符号無しchar型の変数にすることが分かりました。 なぜ、符号無しchar型の変数にしないと正常に表示できないのでしょうか? コンパイラは「Borland C++ Compiler 5.5」です。 お答えできる方、よろしくお願いいたします。

  • 算術シフト演算が成り立つ理由がイマイチ・・・

    算術シフト演算で右シフトにしても左シフトにしてもシフトで空いたビットに符号ビットと同じ物を入れたり0を入れたり、溢れたビットを破棄したり・・・ というのがどうして成り立つのかがイマイチわかりません。 手元の本を見てもWebで探してもそういうことは細かく書かれていなくてよくわからないのです。 レポートで書かなければいけないのにこのままでは答えが出るのが間に合いそうもなく助けを借りたいと思い質問させて頂きました。 どなたかわかる人が居ましたらよろしくお願いします。

  • 情報処理の本を読んでいたんですが・・・

    この画像の左下に、右算術シフトで空いたスペースに入るのは、0決めうちじゃなくて符号ビットなのです。そうじゃないと左にシフトさせたらすぐオーバーフローですよ。 と書いてあるのですが、 「そうじゃないと左にシフトさせたらすぐオーバーフローですよ」 という部分がよくわかりません。 なぜ左シフトさせたらすぐオーバーフローになるのでしょうか・・・

    • ベストアンサー
    • Java
  • 分からない事が多過ぎて恰好が悪いのですが、…。

    " http://情報処理試験.jp/FE21a-pm/t01.html "の設問2・3の両方を、 私は間違えてしまいましたが、当該ページには、 正解の根拠が掲載されていませんから、 学習の進歩に繋げる為に、御教授を賜れませんでしょうか?

  • シフト演算について

    基本情報技術者試験の資格試験のための勉強をしているものです。 現在、カテゴリー的には基礎理論の離散数学、 シフト演算のうち、「論理シフト」ではなく、 「算術シフト」で理解できない点があります。 左シフトは理解できたつもりなんですが・・・ 右シフトがいまいちよくわかりません。 以下に例題を表記します。 【10001100を2ビット左シフト】 先頭ビットは符号ビットということで、マイナスの数値になるのだと思います。すると、 【元の数】 10001100 =-(0001100) =-(8+4) =-12 【2桁左シフト結果=元の数×2^2】 10110000 =-(0110000) =-(32+16) =-48 となり、 元の数=-12 結果 =-48 で、結果が元の数×2^2で結果が合っているようです。 (と思っているだけなんですが) 元の数の考え方自体に間違いがありそうですが・・・ とりあえず進みます。 同様に 【10001100を2ビット右シフト】すると 【2桁右シフト結果=元の数×2^-2(=元の数×1/4)】 11100011 =-(1100011) =-(64+32+8+4) =-99 となり、 元の数=-12 結果 =-99 で、結果が元の数×2^-2(=元の数×1/4)と結果が合いません。 先頭符号を空いたビットに移動した部分は数えないのでしょうか。 すると、 元の値 =-12 結果  =-3 で結果が合う気がします。 過去の回答や検索サイトなどで調べてみましたがピンときません。 テキストにも、10進数での数値表記はなく、 答え合わせができなくて困っております。 どなたかお答えいただけると助かります。 どこが間違っているのか混乱しております。 先頭ビットが正負の符号ビットという前提の例題なのですが、 マイナス符号がついている前提となるので 先頭ビットや空いたビットに入れた符号ビットも含めて 「2の補数」で考える必要があるのかどうかも よくわからなくなってきました。 つまり、元の数値「10001100」は「-12」ではなく -(01110100) =-(64+32+16+4) =-116 なのでしょうか なお、C言語は今のところ学習していないので、 C言語にまつわるご回答ですともっとわからなくなりそうです。 単純に間違いを指摘していただけると大変助かります。 よろしくお願いします。

専門家に質問してみよう