为了账号安全,请及时绑定邮箱和手机立即绑定

用按位运算符实现除法

用按位运算符实现除法

摇曳的蔷薇 2019-11-25 14:14:32
如何使用按位运算符实现除法(而不仅仅是除以2的幂)?详细描述它。
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

进行除法的标准方法是实现二进制长除法。这涉及到减法,因此只要您不将其视作不是按位操作,就应该这样做。(请注意,您当然可以使用按位逻辑运算来非常麻烦地实现减法。)

本质上,如果您正在这样做Q = N/D

  1. 对齐的最显著者ND

  2. 计算t = (N - D);

  3. 如果为(t >= 0),则将的最低有效位设置Q为1并设置N = t

  4. 左移N1。

  5. 左移Q1。

  6. 转到步骤2。

循环输出所需数量的输出位(包括小数),然后进行最后的移位以撤消您在步骤1中所做的操作。


查看完整回答
反对 回复 2019-11-25
?
不负相思意

TA贡献1777条经验 获得超10个赞

int remainder =0;


int division(int dividend, int divisor)

{

    int quotient = 1;


    int neg = 1;

    if ((dividend>0 &&divisor<0)||(dividend<0 && divisor>0))

        neg = -1;


    // Convert to positive

    unsigned int tempdividend = (dividend < 0) ? -dividend : dividend;

    unsigned int tempdivisor = (divisor < 0) ? -divisor : divisor;


    if (tempdivisor == tempdividend) {

        remainder = 0;

        return 1*neg;

    }

    else if (tempdividend < tempdivisor) {

        if (dividend < 0)

            remainder = tempdividend*neg;

        else

            remainder = tempdividend;

        return 0;

    }

    while (tempdivisor<<1 <= tempdividend)

    {

        tempdivisor = tempdivisor << 1;

        quotient = quotient << 1;

    }


    // Call division recursively

    if(dividend < 0)

        quotient = quotient*neg + division(-(tempdividend-tempdivisor), divisor);

    else

        quotient = quotient*neg + division(tempdividend-tempdivisor, divisor);

     return quotient;

 }



void main()

{

    int dividend,divisor;

    char ch = 's';

    while(ch != 'x')

    {

        printf ("\nEnter the Dividend: ");

        scanf("%d", &dividend);

        printf("\nEnter the Divisor: ");

        scanf("%d", &divisor);


        printf("\n%d / %d: quotient = %d", dividend, divisor, division(dividend, divisor));

        printf("\n%d / %d: remainder = %d", dividend, divisor, remainder);


        _getch();

    }

}


查看完整回答
反对 回复 2019-11-25
?
达令说

TA贡献1821条经验 获得超6个赞

使用按位运算符将两个数相除。


#include <stdio.h>


int remainder, divisor;


int division(int tempdividend, int tempdivisor) {

    int quotient = 1;


    if (tempdivisor == tempdividend) {

        remainder = 0;

        return 1;

    } else if (tempdividend < tempdivisor) {

        remainder = tempdividend;

        return 0;

    }   


    do{


        tempdivisor = tempdivisor << 1;

        quotient = quotient << 1;


     } while (tempdivisor <= tempdividend);



     /* Call division recursively */

    quotient = quotient + division(tempdividend - tempdivisor, divisor);


    return quotient;



int main() {

    int dividend;


    printf ("\nEnter the Dividend: ");

    scanf("%d", &dividend);

    printf("\nEnter the Divisor: ");

    scanf("%d", &divisor);   


    printf("\n%d / %d: quotient = %d", dividend, divisor, division(dividend, divisor));

    printf("\n%d / %d: remainder = %d", dividend, divisor, remainder);

    getch();

}


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 1327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信