201. Bitwise AND of Numbers Range
发布时间:2020-12-14 04:18:27 所属栏目:大数据 来源:网络整理
导读:一、题目 1、审题 2、分析 求 n~m 范围内的所有数字进行二进制 运算后的结果。 ? 二、解答 1、思路: 方法一、 以 26~30 为例,二级制 运算,若出现了一个 0 则结果为 0。在这个例子中,结果为 11000,因此我们要减去后边部分不同的部分。这里后边有 3 个不
一、题目 1、审题
2、分析 求 n~m 范围内的所有数字进行二进制 & 运算后的结果。 ? 二、解答 1、思路: 方法一、 以 26~30 为例,二级制 & 运算,若出现了一个 0 则结果为 0。在这个例子中,结果为 11000,因此我们要减去后边部分不同的部分。这里后边有 3 个不同。
public int rangeBitwiseAnd2(int m,int n) { int i = 0; // i means we have how many bits are 0 on the right while(m != n){ m >>= 1; n >>= 1; i++; } return m << i; } ? 方法二、 直接统计 m、n 共同前缀。后边部分置为 0。 public int rangeBitwiseAnd(int m,int n) { return (n > m) ? (rangeBitwiseAnd(m >> 1,n >> 1) << 1) : m; } ? 方法三、 每次将 n 的最右边的 1 化为 0,直到 m >= n,则 n 即为 答案。 public int rangeBitwiseAnd3(int m,int n) { while(m < n) n = n & (n - 1); // 每次将 n 最右边一个 1 去除 return n; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |