*
、、、、、演算子を使用せずに数を 3 で割るにはどうすればよいでしょう/
か?+
-
%
数値は符号付きでも符号なしでもかまいません。
ベストアンサー1
これは単純な機能これは目的の操作を実行します。ただし、+
演算子が必要なので、あとはビット演算子を使用して値を追加するだけです。
// replaces the + operator
int add(int x, int y)
{
while (x) {
int t = (x & y) << 1;
y ^= x;
x = t;
}
return y;
}
int divideby3(int num)
{
int sum = 0;
while (num > 3) {
sum = add(num >> 2, sum);
num = add(num >> 2, num & 3);
}
if (num == 3)
sum = add(sum, 1);
return sum;
}
Jim がコメントしたように、これが機能するのは次の理由からです:
n = 4 * a + b
n / 3 = a + (a + b) / 3
つまり
sum += a
、、、n = a + b
を繰り返すa == 0 (n < 4)
、sum += floor(n / 3);
すなわち1のとき、if n == 3, else 0