Beispiel #1
0
 int rangeBitwiseAnd(int m, int n) {
   if (m == 0) {
     return 0;
   }
   if (m == n) {
     return m;
   }
   const integer_info mi = info(m), ni = info(n);
   return ni.digits == mi.digits ? mi.fst + rangeBitwiseAnd(mi.rem, ni.rem) : 0;
 }
Beispiel #2
0
//time complexity: O(1)
//space complexity: O(1)
//2A : missing the recursive part in line 24 caused the first failure
int rangeBitwiseAnd(int m, int n) {
	if (m == 0) {
		return 0;
	}

	if (m == n) {
		return m;
	}

	int len1 = bitLength(m);
	int len2 = bitLength(n);
	if (len1 == len2) {
		int leastNum = 1 << (len1 - 1);
		return leastNum + rangeBitwiseAnd(m - leastNum, n - leastNum);
	} else {
		return 0;
	}
}
int rangeBitwiseAnd(int m, int n) { return (n > m) ? (rangeBitwiseAnd(m/2, n/2) << 1) : m; }
 int rangeBitwiseAnd(int m, int n) {
    /// return 0xffffffff<<(int)floor(log(n-m))&n; //bug:n-m可能为0
    return (0xffffffff << (int)ceil(log2(n-m+1))) & m & n;
    或
    return (n > m) ? (rangeBitwiseAnd(m/2, n/2) << 1) : m;
 }
Beispiel #5
0
int main(){
	int ret =rangeBitwiseAnd(5,7);

	printf("ret:%d\n",ret);
	puts("end of app");
}