乗算/シフト除算法 (たとえば、2^32/10 を乗算してから 32 を右にシフト) を負の数で使用すると、期待される結果から 1 を引いた結果が得られるのはなぜですか?
たとえば、99/10 を実行すると予想どおり 9 が得られますが、-99/10 を実行すると -10 が得られます。
これが実際に当てはまることを確認しました(ビットを使用して手動で行いました)が、その背後にある理由を理解できません。
なぜこれが起こるのかを簡単な言葉で説明できる人がいれば、私は感謝します.
乗算/シフト除算法 (たとえば、2^32/10 を乗算してから 32 を右にシフト) を負の数で使用すると、期待される結果から 1 を引いた結果が得られるのはなぜですか?
たとえば、99/10 を実行すると予想どおり 9 が得られますが、-99/10 を実行すると -10 が得られます。
これが実際に当てはまることを確認しました(ビットを使用して手動で行いました)が、その背後にある理由を理解できません。
なぜこれが起こるのかを簡単な言葉で説明できる人がいれば、私は感謝します.
乗算/シフト除算法 (たとえば、2^32/10 を乗算してから 32 を右にシフト) を負の数で使用すると、期待される結果から 1 を引いた結果が得られるのはなぜですか?
切り捨てられた期待される結果が得られます。
-99/10
は切り捨てたものです-9.9
。-10
編集: もう少しググって、この記事では、ネガを特別なケースとして処理することになっていると述べています。
デバッグ モードでは、特に負の数と正の数の両方があり、符号を自分で処理する必要がある場合は、最適化されたコードが遅くなる可能性があることに注意してください。