みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

算術シフトと論理シフトの違いは?

「コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識」書籍内のP61のところにある「表3.1 Z80 CPUの主な命令」の表の「演算命令」の欄に

「SLA:算術左シフトをする」
「SRA:算術右シフトをする」
「SRL:論理右シフトをする」

というのがあるのですが、この「算術シフト」と「論理シフト」はどう違うのでしょうか?

「シフト」と言うと
「データを右にずらす。」
「データを左にずらす。」

というイメージがあるのですが、これと似たようなものなんでしょうか?

わかりやすく教えてください。できればわかりやすい「例え」で教えてくれたほうが幸いです。

よろしくお願いいたします。

投稿日時 - 2019-02-01 20:45:08

QNo.9583623

すぐに回答ほしいです

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

論理シフトは、レジスタの値を単なるビットの集まりとして扱います。
右シフトするときは左からゼロを補い、左シフトするときは右からゼロを補います。

算術シフトは、レジスタの値を符号付き2進数として扱います。
符号付き2進数は、最上位ビットを符号(0が非負数、1が負数を示す)として扱います。負の数を右シフトしても負の数で有り続けるために、負の数の場合は左から1を補います。非負の数は右シフトしても非負であるために左からゼロを補います。右シフトは数値を2で割ることに相当します。

左シフトでは、右からゼロを補うということで、論理シフトと同じなので、算術左シフトはありません。左シフトは数値に2を掛けることに相当します。絶対値が大きくなるので、8ビット符号付き2進数で表せる範囲(-128~127)から外へ出てしまう可能性があります。これは、シフト前後で符号ビットが変化してしまった場合がそれに該当しますが、このときはオーバーフローフラグが1になるので、桁あふれが起こったことが分かります。

投稿日時 - 2019-02-01 22:44:06

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>この質問とこれとは関係あるのですか?

はい。

投稿日時 - 2019-02-02 11:50:31

補足

じゃあどこが関係あるのですか?

投稿日時 - 2019-02-02 17:18:37

お礼

じゃあどこが関係あるのですか?

投稿日時 - 2019-02-02 17:18:42

ANo.1

情報工学かー。
検索スキルないと就職してからつむよ。

http://www.aobasoft.co.jp/casl/html/010_200.htm

投稿日時 - 2019-02-01 21:51:42

補足

この質問とこれとは関係あるのですか?

投稿日時 - 2019-02-02 09:36:30

お礼

この質問とこれとは関係あるのですか?

投稿日時 - 2019-02-02 09:36:32

あなたにオススメの質問