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

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

解決済みの質問

算術シフトの方法

1101(=-3)を算術シフトで1ビット右シフトしたときの結果についてご質問いたします。
この算術シフトを私が計算すると、1110 (=-2)となってしまいます。
しかし、本当は-3の1/2で、1111(=-1)と余りになるはずですよね?
なぜ計算が正しくできないのか教えてください。

上記計算は、手持ちの本を参考に、以下のようにして行いました。
(1)1101の符号ビットを残して、右に1ビットシフト
(2)空いたスペースに符号ビットを挿入し、1110を得る

投稿日時 - 2013-07-04 19:14:37

QNo.8162358

困ってます

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

右算術シフトが2のべき乗の割り算になるというのは間違ってはいませんが、
負の数を割ったときの商、余りの方法は決まっていません。

-3を2で割った場合、
-3 = -2*2 +1 ⇒ 商が-2で、余り+1 (余りは常に正)
-3 = -1*2 -1 ⇒ 商が-1で、余り-1 (余りは被除数と同符号にする)
どちらも正しいです。
算術シフトだと上の例になります。
プログラミング言語で整数除算機能を持っているものでも、言語により様々です。

投稿日時 - 2013-07-04 21:39:34

お礼

なるほど、商、余りの求め方には二通りあるのですか。手持ちの参考書には記載ありませんでしたので、助かりました。
どうもありがとうございました。

投稿日時 - 2013-07-05 09:08:28

ANo.2

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

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

回答(2)

ANo.1

算術シフトと1/2は違いますよ。
あなたの指摘したようになります。

投稿日時 - 2013-07-04 19:24:35

お礼

どうもありがとうございました。

投稿日時 - 2013-07-05 09:08:41

あなたにオススメの質問