Деление с использованием правого сдвига для делителя, который не является степенью 2 - PullRequest
0 голосов
/ 30 июня 2011

Я хотел бы выполнить деление числа на 60, которое не является степенью двойки, используя операцию правого сдвига.Как мне это сделать?

Если я хочу num / 64, я могу сделать num >> 6, так как 64 = 2^6

Как мне сделать это для 60?

1 Ответ

1 голос
/ 29 декабря 2011

Это должно работать:

public static final long divisionUsingShift(int x, int y) {
    int a, b, q, counter;

    q = 0;
    if (y != 0) {
        while (x >= y) {
            a = x >> 1;
            b = y;
            counter = 1;
            while (a >= b) {
                b <<= 1;
                counter <<= 1;
            }
            x -= b;
            q += counter;
        }
    }
    return q;
}
...