- 締切済み
情報処理の某参考書に…
「算術シフトでは、左シフトで負数の割り算もできる」 「-5を2ビット左シフトすると2^2 = 4で割ることになります」 という一文があるのですが、これは「右シフト」の間違いですか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ymmasayan
- ベストアンサー率30% (2593/8599)
関連するQ&A
- 情報処理の本を読んでいたんですが・・・
この画像の左下に、右算術シフトで空いたスペースに入るのは、0決めうちじゃなくて符号ビットなのです。そうじゃないと左にシフトさせたらすぐオーバーフローですよ。 と書いてあるのですが、 「そうじゃないと左にシフトさせたらすぐオーバーフローですよ」 という部分がよくわかりません。 なぜ左シフトさせたらすぐオーバーフローになるのでしょうか・・・
- ベストアンサー
- Java
- 問題の意味がわかりません
8ビットのレジスタに、ある負数が2の補数表示で入っている時これを4ビット右算術シフト結果ありえるビット列はなんでしょうか? これの問題はいったい何を言いたいのでしょうか?
- ベストアンサー
- その他([技術者向] コンピューター)
- 算術シフトしたら、あれ?
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) 増えるはずが減って、減るはずが増えるというあべこべになってしまいます。 超基本的ことなんですが、なぜか本に記載されていなかったので書きました。ご協力ください。
- ベストアンサー
- その他([技術者向] コンピューター)
- 2進数ビット列の算術シフトについて
技術者向けでは基本的すぎて笑われてしまうかも知れません。が、プロの方で詳しい方にお聞きしたかったのです。例えば、プラスの数値を算術右シフトすれば 「あふれたビットを破棄するのは、その範囲で表現できないから切り捨てる。 たとえば3を2で割ると1.5ですが、 1右シフトすると1になりますが、 0.5を保持する桁がないからですね。 逆に桁あふれも同じ意味ですね。」という回答を見たのですが、確かにプラス部(負数でない部分)については理解出来るのですが、これがマイナスの整数(電算機上では負数)の場合、例えば「-1.5」であれば「-2」になるということでした。なぜ単純に「-0.5」部分の切り捨てで済まないのでしょうか?
- ベストアンサー
- その他([技術者向] コンピューター)
- 算術シフト演算が成り立つ理由がイマイチ・・・
算術シフト演算で右シフトにしても左シフトにしてもシフトで空いたビットに符号ビットと同じ物を入れたり0を入れたり、溢れたビットを破棄したり・・・ というのがどうして成り立つのかがイマイチわかりません。 手元の本を見てもWebで探してもそういうことは細かく書かれていなくてよくわからないのです。 レポートで書かなければいけないのにこのままでは答えが出るのが間に合いそうもなく助けを借りたいと思い質問させて頂きました。 どなたかわかる人が居ましたらよろしくお願いします。
- 締切済み
- C・C++・C#
- ビットシフトについて
12ビットのデータ(符号付き)を16ビットのデータに変換したいです。 自分なりに考えたのですが・・・ 最上位ビット(符号を表すビット)の位置が違うので左に4ビットシフト、 右に4ビットシフトします(どちらも算術シフトとします) 例 0000 1011 1101 0101 (12bit のデータ) →1011 1101 0101 0000 (左にシフト) →1111 1011 1101 0101 (右にシフト) こうするとたしかに16ビットのデータの最上位ビットには12ビットのデータの符号が 反映されるように思えるんですが、符号を除いた値そのものが変わってしまいますよね? どうしたらいいでしょうか 切羽詰まってて文章めちゃくちゃで分かりづらいかとは思いますが、解答よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 「左算術シフト」について
「算術シフト」についての質問です。 算術シフトには「右シフト」「左シフト」というものがあり、 「右算術シフト」の場合は、右シフトする時、一番左側の数(符号)が 「0」の場合→一番左側から「0」を補う。 「1」の場合→一番左側から「1」を補う。 ということですが、「左算術シフト」だとこんな感じでよろしいのでしょうか? 一番左側の数(符号)→そのまま(固定のまま) 二番目の左側の数(符号)→捨てる 三番目以降の左側の数(符号)→左へスライド 最後(一番右側)の数(符号)→右からゼロを補う ↑私の考えだと「左算術シフト」はこういうのものだと思いますが、こんな解釈でよろしいのでしょうか? よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 算術シフトと論理シフトの違いは?
「コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識」書籍内のP61のところにある「表3.1 Z80 CPUの主な命令」の表の「演算命令」の欄に 「SLA:算術左シフトをする」 「SRA:算術右シフトをする」 「SRL:論理右シフトをする」 というのがあるのですが、この「算術シフト」と「論理シフト」はどう違うのでしょうか? 「シフト」と言うと 「データを右にずらす。」 「データを左にずらす。」 というイメージがあるのですが、これと似たようなものなんでしょうか? わかりやすく教えてください。できればわかりやすい「例え」で教えてくれたほうが幸いです。 よろしくお願いいたします。
- ベストアンサー
- 情報工学
- 算術シフトについて
基本的なことで申し訳ないのですが、コンピューターのシフト演算命令において、算術右シフトでは、なぜ「符号ビット」と同じビットを空いたビットに補充することになるのでしょうか?
- 締切済み
- その他([技術者向] コンピューター)
お礼
やはり間違いですよね! しかも、これは例題などではなく、本文の記述中の誤りみたいです。 結構、定評ある参考書らしいんですが… 間違えもあるということですね。 ありがとうございました。