除法算法
1、8位除法
unsigned int divide_8bit(unsigned int dividend, unsigned int divisor) { // 初始化商和余数为0 unsigned int quotient = 0; unsigned int remainder = 0; // 从最高位开始进行除法操作,一直到被除数为0 for (int i = 8; i >= 0; i--) { // 左移余数,并将最低位赋值为被除数的对应位 remainder = (remainder << 1) | ((dividend >> i) & 1); // 判断余数是否大于或等于除数 if (remainder >= divisor) { // 减去除数,并将商的对应位设置为1 remainder = remainder - divisor; quotient = quotient | (1 << i); } } // 返回商 return quotient; }
2、16位除法
// 16位除法 unsigned int divide_16bit(unsigned int dividend, unsigned int divisor) { // 初始化商和余数为0 unsigned int quotient = 0; unsigned int remainder = 0; // 从最高位开始进行除法操作,一直到被除数为0 for (int i = 15; i >= 0; i--) { // 左移余数,并将最低位赋值为被除数的对应位 remainder = (remainder << 1) | ((dividend >> i) & 1); // 判断余数是否大于或等于除数 if (remainder >= divisor) { // 减去除数,并将商的对应位设置为1 remainder = remainder - divisor; quotient = quotient | (1 << i); } } // 返回商 return quotient; }
3、定点除法
unsigned int approximateDivide(unsigned int dividend, unsigned int divisor) { // 将除法转换为整数乘法,使用固定小数点数表示法 unsigned int fixedDividend = dividend * 100; // 调整小数点位置为两位 unsigned int quotient = divide_16bit(fixedDividend, divisor); return quotient; }

浙公网安备 33010602011771号