- ベストアンサー
算術シフトの方法
1101(=-3)を算術シフトで1ビット右シフトしたときの結果についてご質問いたします。 この算術シフトを私が計算すると、1110 (=-2)となってしまいます。 しかし、本当は-3の1/2で、1111(=-1)と余りになるはずですよね? なぜ計算が正しくできないのか教えてください。 上記計算は、手持ちの本を参考に、以下のようにして行いました。 (1)1101の符号ビットを残して、右に1ビットシフト (2)空いたスペースに符号ビットを挿入し、1110を得る
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
右算術シフトが2のべき乗の割り算になるというのは間違ってはいませんが、 負の数を割ったときの商、余りの方法は決まっていません。 -3を2で割った場合、 -3 = -2*2 +1 ⇒ 商が-2で、余り+1 (余りは常に正) -3 = -1*2 -1 ⇒ 商が-1で、余り-1 (余りは被除数と同符号にする) どちらも正しいです。 算術シフトだと上の例になります。 プログラミング言語で整数除算機能を持っているものでも、言語により様々です。
その他の回答 (1)
- maiko0318
- ベストアンサー率21% (1483/6969)
回答No.1
算術シフトと1/2は違いますよ。 あなたの指摘したようになります。
質問者
お礼
どうもありがとうございました。
お礼
なるほど、商、余りの求め方には二通りあるのですか。手持ちの参考書には記載ありませんでしたので、助かりました。 どうもありがとうございました。