public class ReverseBits {
public static void main(String[] args) {
int res = reverseBits02(-3);
System.out.println(res);
}
//思路1:逐步移位,时间复杂度:O(log2N)
public static int reverseBits(int n) {
int res = 0;
int power = 31;
while ( n != 0 ) {
res += (n & 1) << power;//从右到左扫描n我每一位,第i 位就反转到31 - i 位
power -= 1;
n = n >> 1;//n 右移一位
}
return res;
}
//思路2:求模取和,与十进制反转相似
//十进制:ans = ans * 10 + n % 10;
// n = n / 10;
//二进制:ans = ans * 2 + n % 2;
// n = n / 2;
public static int reverseBits02(int n) {
int res = 0;
for (int i = 0; i < 32; i ++) {
res = (res << 1) + (n & 1);
n >>= 1;
}
return res;
}
}
颠倒二进制位的两种思路及JAVA代码
最新推荐文章于 2024-04-23 19:50:58 发布