整数,n >= 0、d > 0
除数是 d = 2^k`
除法:
q = n >> k;取余:
r = n & (d - 1);除数不是 2^k
编译器通常会把除法改写成乘法 + 移位,不一定真的发出除法指令
取余一般直接由商回算:
q = fast_div(n, d); // 除法
r = n - q * d; // 取余fast_div 原理
整数,n >= 0、d > 0
除法:
q = n >> k;取余:
r = n & (d - 1);2^k编译器通常会把除法改写成乘法 + 移位,不一定真的发出除法指令
取余一般直接由商回算:
q = fast_div(n, d); // 除法
r = n - q * d; // 取余fast_div 原理