0

乗算/シフト除算法 (たとえば、2^32/10 を乗算してから 32 を右にシフト) を負の数で使用すると、期待される結果から 1 を引いた結果が得られるのはなぜですか?

たとえば、99/10 を実行すると予想どおり 9 が得られますが、-99/10 を実行すると -10 が得られます。

これが実際に当てはまることを確認しました(ビットを使用して手動で行いました)が、その背後にある理由を理解できません。

なぜこれが起こるのかを簡単な言葉で説明できる人がいれば、私は感謝します.

4

1 に答える 1

1

乗算/シフト除算法 (たとえば、2^32/10 を乗算してから 32 を右にシフト) を負の数で使用すると、期待される結果から 1 を引いた結果が得られるのはなぜですか?

切り捨てられた期待される結果が得られます。

-99/10は切り捨てたものです-9.9-10


編集: もう少しググって、この記事では、ネガを特別なケースとして処理することになっていると述べています。

デバッグ モードでは、特に負の数と正の数の両方があり、符号を自分で処理する必要がある場合は、最適化されたコードが遅くなる可能性があることに注意してください。

于 2013-04-26T13:56:16.393 に答える