ビットシフト演算子またはビット演算子のみを使用して、整数を別の整数(正の両方)で除算して剰余を得る方法を知りたい。 /
オペレータまたは%
オペレータは使用しないでください。剰余を得るためのビットシフト
たとえば、divisorが2^k
の形式のときの剰余を得るには、次の操作で剰余が得られます。
m = Remainder
n = The number
d = The divisor
m = n & (d - 1)
d
フォーム2^k
である場合にのみ、しかし、この方法は機能します。私は2
の非力のための同様の方法を知りたい。あなたは絶対に使用できない場合、私は現在、programming challenges
から問題に取り組んで、オペレータ%
を使用していない任意の答えはあまり効率的な答えになるプログラムの実行時間
ビット表現がベース2のみに限られているという事実はありませんか?値43/7を考えてみましょう。値は実際には6.142857 ...です。ベースの値が2よりも高い場合、どのような一般的なアプローチが考えられますか? – Makoto
一般的な方法はありません。あなたは除数を知っている場合、除算を乗算といくつかのシフトと加算/減算で置き換えることができます。有能なCコンパイラに問い合わせてください。そうすればコンパイル時定数の魔法の値が得られます。 –
答えに1ビットシフトステートメントだけが含まれていない限り、私はあなたがjavas mod演算子を上回らないと確信しています。 – goat