- ベストアンサー
問題の意味がわかりません
8ビットのレジスタに、ある負数が2の補数表示で入っている時これを4ビット右算術シフト結果ありえるビット列はなんでしょうか? これの問題はいったい何を言いたいのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.4回答者です。 「答えを教えることができない」ではなく「題意(=問題の意味)を予想することしかできない」と書いたのですが・・・何にしても、回答No.4への補足で、題意は分かりました。(最初からそのように書いてくれれば分かったのですが。) 考え方ですが、まずその回答No.4への補足にあった5択のうち(オ)が正解であること、および(オ)以外が正解にはなり得ないことの理由はお分かりになっているでしょうか。 8ビット2の補数表現での負数が1xxxxxxxとなることは、どうでしょう。 仮に8ビット2の補数表現で1abcdefg(a/b/c/d/e/f/gはそれぞれ0または1の1ビットを表す)という負数がある場合、これを1ビット右へ算術シフトすると11abcdefとなることは? 「4ビット右へ算術シフト」した結果は「1ビット右へ算術シフト」を4回繰り返した結果と同じになるというのは、どうでしょうか。 ここまでが理解できていれば、もう全部分かったも同然です。途中で引っかかるようであれば、参考書の、それに相当する部分を復習してみてください。
その他の回答 (5)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
一般に、 右シフトすれば1/2に、 左シフトすれば2倍になります。 ところで、シフトには、 いわゆる論理シフトと算術シフトがあって、 符号を考慮するかどうかでシフトと意味が変わってきます。 論理シフトの場合シフトして空いたビットには0が入ります。 10101010→1ビット右にシフト01010101、一番右側の0は捨てられる 算術シフトの場合 10101010→1ビット左にシフト11010101 となります、 -2を右シフトして1/2にするとき、 結果は-1になって欲しいですよね。 そのことを考えると、算術シフトと論理シフトの違いがわかると思います。
お礼
この問題の意味がわかりました。 C言語検定で頭がいっぱいであったので、 いい復習になりました。感謝してます。 ありがとうございした。
補足
論理シフトと算術シフトの違いは先日学校で習ったばかりです。 復習もかねて書きますね(^^) 算術シフトには符号ビットがついてして符号ビットは固定なんですよね。右へシフトの時はあいたビットに符号ビットと同じ値が挿入されて、左ビットの時は右のあいたビットには0が挿入されるのですよね。 論理シフトは右・左にシフトしたときあいたビットに0を挿入するんですよね。 なんでこんなシフトする必要なるの?その理由も教えてくれました。 私たちもう小学校の頃から掛け算のひっさんで知らないうちにシフト演算してたんですね。それには驚きでした。 じゃあ先生に「はみ出した数はどうなるの?」と質問したら「左にはみ出したらオーバーフロー・右にはみ出したらアンダーフローなんだぞ」といわれたんです。 そうすればこれ、誤差の部分でやったような…うーむ(-。-) これ書いたら復習します。
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
質問の意味が不明瞭です。 「8ビットのレジスタに、ある負数が2の補数表示で入っている時これを4ビット右算術シフト結果ありえるビット列はなんでしょうか?」という問題があるのですが、題意が読み取れません。 という質問でしょうか。 だとすれば、問題文自体が不明瞭ですので、出題者に題意を質問する以外に「正しい題意」を知る方法はありません。我々(回答者)は題意を「想像」「予想」することはできますが、それが正解かどうか判断できるのは出題者だけだからです。
補足
8ビットあるレジスタに、ある負数が2の補数表示ではいっている。これを4ビット右へ算術シフトをした結果として、ありうるビット列はいくつか? ア・00000111 イ・00001111 ウ・10000000 エ・10000110 オ・11111111 正解オ 答えを教えてくれという質問ではなく、問題の意味と考え方が知りたいのです。
- nrb
- ベストアンサー率31% (2227/7020)
2の補数表示で入っている時これをなんで関係ないからね・・・・・・・ その意味が判って計算できるかが問われてる問題ですね 8ビットのレジスタをビット右算術シフト結果ありえるビット列はなんでしょうか と同じですね ある負数が2の補数表示で入っている時は関係ないですね
- fortranxp
- ベストアンサー率26% (181/684)
ある負数が 1001 0000は-16ですから 算術右シフト1ビットで 1000 1000==-8 2ビットで 1000 0100==-4 3ビットで 1000 0010==-2 4ビットで 1000 0001==-1 になりますね。 ですから 1001 0000(-16)から1111 0000(-112)となり ありえる というか無効にならないビット列は上位4ビットという 意味にとれますが 良い問題とは思えません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
元の負数の16分の1(商)になるということでしょう、多分。
お礼
この問題の意味がわかりました。 C言語検定で頭がいっぱいであったので、 いい復習になりました。感謝してます。 ありがとうございした。
補足
まず2の補数かつ負数であるから 1xxxxxxx ですよね これを4bit右へ算術シフトするのだから 1111xxxx なのだから… 選択肢から当てはまるものといえば… あっわかりました! 最初に 1111 がついているのは オの11111111しかありませんね。 なるほどこの問題が言いたい事わかりましたよ!