用按位运算符实现除法

如何使用按位运算符实现除法(而不仅仅是除以2的幂)?

详细描述它。



摇曳的蔷薇
浏览 1330回答 3
3回答

慕的地8271018

进行除法的标准方法是实现二进制长除法。这涉及到减法,因此只要您不将其视作不是按位操作,就应该这样做。(请注意,您当然可以使用按位逻辑运算来非常麻烦地实现减法。)本质上,如果您正在这样做Q = N/D:对齐的最显著者N和D。计算t = (N - D);。如果为(t >= 0),则将的最低有效位设置Q为1并设置N = t。左移N1。左移Q1。转到步骤2。循环输出所需数量的输出位(包括小数),然后进行最后的移位以撤消您在步骤1中所做的操作。

不负相思意

int remainder =0;int division(int dividend, int divisor){&nbsp; &nbsp; int quotient = 1;&nbsp; &nbsp; int neg = 1;&nbsp; &nbsp; if ((dividend>0 &&divisor<0)||(dividend<0 && divisor>0))&nbsp; &nbsp; &nbsp; &nbsp; neg = -1;&nbsp; &nbsp; // Convert to positive&nbsp; &nbsp; unsigned int tempdividend = (dividend < 0) ? -dividend : dividend;&nbsp; &nbsp; unsigned int tempdivisor = (divisor < 0) ? -divisor : divisor;&nbsp; &nbsp; if (tempdivisor == tempdividend) {&nbsp; &nbsp; &nbsp; &nbsp; remainder = 0;&nbsp; &nbsp; &nbsp; &nbsp; return 1*neg;&nbsp; &nbsp; }&nbsp; &nbsp; else if (tempdividend < tempdivisor) {&nbsp; &nbsp; &nbsp; &nbsp; if (dividend < 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; remainder = tempdividend*neg;&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; remainder = tempdividend;&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; }&nbsp; &nbsp; while (tempdivisor<<1 <= tempdividend)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; tempdivisor = tempdivisor << 1;&nbsp; &nbsp; &nbsp; &nbsp; quotient = quotient << 1;&nbsp; &nbsp; }&nbsp; &nbsp; // Call division recursively&nbsp; &nbsp; if(dividend < 0)&nbsp; &nbsp; &nbsp; &nbsp; quotient = quotient*neg + division(-(tempdividend-tempdivisor), divisor);&nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; quotient = quotient*neg + division(tempdividend-tempdivisor, divisor);&nbsp; &nbsp; &nbsp;return quotient;&nbsp;}void main(){&nbsp; &nbsp; int dividend,divisor;&nbsp; &nbsp; char ch = 's';&nbsp; &nbsp; while(ch != 'x')&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; printf ("\nEnter the Dividend: ");&nbsp; &nbsp; &nbsp; &nbsp; scanf("%d", &dividend);&nbsp; &nbsp; &nbsp; &nbsp; printf("\nEnter the Divisor: ");&nbsp; &nbsp; &nbsp; &nbsp; scanf("%d", &divisor);&nbsp; &nbsp; &nbsp; &nbsp; printf("\n%d / %d: quotient = %d", dividend, divisor, division(dividend, divisor));&nbsp; &nbsp; &nbsp; &nbsp; printf("\n%d / %d: remainder = %d", dividend, divisor, remainder);&nbsp; &nbsp; &nbsp; &nbsp; _getch();&nbsp; &nbsp; }}

达令说

使用按位运算符将两个数相除。#include <stdio.h>int remainder, divisor;int division(int tempdividend, int tempdivisor) {&nbsp; &nbsp; int quotient = 1;&nbsp; &nbsp; if (tempdivisor == tempdividend) {&nbsp; &nbsp; &nbsp; &nbsp; remainder = 0;&nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; } else if (tempdividend < tempdivisor) {&nbsp; &nbsp; &nbsp; &nbsp; remainder = tempdividend;&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp; &nbsp; do{&nbsp; &nbsp; &nbsp; &nbsp; tempdivisor = tempdivisor << 1;&nbsp; &nbsp; &nbsp; &nbsp; quotient = quotient << 1;&nbsp; &nbsp; &nbsp;} while (tempdivisor <= tempdividend);&nbsp; &nbsp; &nbsp;/* Call division recursively */&nbsp; &nbsp; quotient = quotient + division(tempdividend - tempdivisor, divisor);&nbsp; &nbsp; return quotient;}&nbsp;int main() {&nbsp; &nbsp; int dividend;&nbsp; &nbsp; printf ("\nEnter the Dividend: ");&nbsp; &nbsp; scanf("%d", &dividend);&nbsp; &nbsp; printf("\nEnter the Divisor: ");&nbsp; &nbsp; scanf("%d", &divisor);&nbsp; &nbsp;&nbsp; &nbsp; printf("\n%d / %d: quotient = %d", dividend, divisor, division(dividend, divisor));&nbsp; &nbsp; printf("\n%d / %d: remainder = %d", dividend, divisor, remainder);&nbsp; &nbsp; getch();}
打开App,查看更多内容
随时随地看视频慕课网APP