除法算法

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

 

posted @ 2023-08-08 08:05  颖风船  阅读(71)  评论(0)    收藏  举报