私はこの宿題の問題を解決する方法に完全に行き詰まっており、続けるためのヒントを探しています。操作は 20 回に制限されています (=
この 20 回にはカウントされません)。
次のような関数を入力することになっています。
/* Supposed to do x%(2^n).
For example: for x = 15 and n = 2, the result would be 3.
Additionally, if positive overflow occurs, the result should be the
maximum positive number, and if negative overflow occurs, the result
should be the most negative number.
*/
int remainder_power_of_2(int x, int n){
int twoToN = 1 << n;
/* Magic...? How can I do this without looping? We are assuming it is a
32 bit machine, and we can't use constants bigger than 8 bits
(0xFF is valid for example).
However, I can make a 32 bit number by ORing together a bunch of stuff.
Valid operations are: << >> + ~ ! | & ^
*/
return theAnswer;
}
左にシフトできるのではないかと考えていtwoToN
ました...どうにかして(if/elseなしで)xよりも大きいことを確認し、次に右に1回シフトしてから、xでxorします...そして繰り返す?しかし、私は20回の手術しかありません!