Java实现按位除法

时间:2016-02-21 03:43:59

标签: java binary bit

    String n1="1010100000000010",n2="10000111";
    int div=Integer.parseInt(n1,2);
    int divisor=Integer.parseInt(n2,2);
    int div_Hi=0;

    for(int i=0;i<8;i++){

        dividend<<=1;

        if(dividend_Hi>=divisor){

            dividend_Hi-=divisor;
            dividend=dividend+1;

        }
    }

在图中,有一个二进制除法算法。以下是我的问题:

  • 如何初始化dividend_Hi?
  • 如何在代码中使用dividend_Lo?
  • 我需要在代码中进行哪些更正?enter image description here

2 个答案:

答案 0 :(得分:0)

假设y>0为4,您想要8位数的高4位和低4位:

n

简单地保持低1 1 1 0 0 1 0 1 ↓ ↓ ↓ 0 1 0 1 1 1 1 0 位很容易,你只需掩盖其余部分。在位逻辑中,这意味着与n进行逐位AND,您可以通过将00001111左移1来计算,得到n,然后减去10000给你1

1111

获得高位更容易。只需将lo = num & ((1 << n) - 1); 位向右移动:

n

答案 1 :(得分:0)

dividend_Hi只是你2n位红利的上半部分。因此,假设您的股息为6(110),除数为2(10)。在这种情况下,n为3,因为这是表示整数所需的最小位数。因此,对于2n位的被除数(2n = 6),您只需用零(000110)填充左侧。

int dividend = 6;
int divisor  = 2;
int n1 = Integer.SIZE - Integer.numberOfLeadingZeros(dividend);
int n2 = Integer.SIZE - Integer.numberOfLeadingZeros(divisor);
int n = n1 >= n2 ? n1 : n2;
int dividend_Hi = dividend >> n;
int dividend_Lo = dividend & ((1 << n) - 1);

for (int i = 0; i < n; i++) {
    dividend <<= 1;
    dividend_Hi = dividend >> n;
    if (dividend_Hi >= divisor) {
        dividend_Hi -= divisor;
        dividend++;
    }
    dividend_Lo = dividend & ((1 << n) - 1);
    dividend = dividend_Hi << n | dividend_Lo;
}