宿題の課題で、質問の1つは、+、-、および<<演算子と、最大3つの演算のみを使用して、任意の整数に定数を掛けることを求めました。たとえば、最初の定数は17でしたが、これを次のように解きました。
(x << 4) + x
ただし、指定された定数の一部は負でした(-7など)。7を掛けるのは比較的簡単なことですが(私はそれを持っています(x << 3) - x
)、許可された3つの演算子だけを使用して符号を反転する方法を理解することはできません。
すべての結果に2147483648を加算または減算することでそのビットを反転しようとしましたが(これにより最上位ビットが強制的に使用され、符号が反転するという考えで)、C#でのテスト実装では、これは失敗しました。
-7に機能的に類似する特定のintを乗算できる正の数はありますか?2147483648を追加すると、C#以外の言語で機能しますか?私は何かを見落としていますか?
本からの元の質問は以下の通りです:
整数変数xにさまざまな異なる定数係数Kを乗算するコードを生成するタスクが与えられているとします。効率的にするには、演算+、-、および<<のみを使用します。次のKの値については、式ごとに最大3つの演算を使用して乗算を実行するC式を記述します。
A. K = 17
B. K = -7
C. K = 60
D. K = -112