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;
}
}
在图中,有一个二进制除法算法。以下是我的问题:
答案 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;
}