• ベストアンサー

算術シフトの方法

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

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

RichardDD
質問者

お礼

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

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

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

RichardDD
質問者

お礼

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

関連するQ&A