使用右移的分频器,不是2的功率

时间:2011-06-30 09:18:18

标签: division bit-shift

我想使用右移操作执行数字除以60,这不是2的幂。我该怎么做?

如果我想要num / 64,我可以从num >> 6

开始64 = 2^6

我怎么做60?

1 个答案:

答案 0 :(得分:1)

这应该有效:

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;
}