颠倒二进制位---java
示例 1:
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例 2:
输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析题目:首先是提供一个十进制转了二进制,再将二进制进行颠倒输出,才是答案。
必须要了解的知识点:
<< 表示左移
表示右移
比如1100,向右移动2位就是0011,就是3
public class Solution {
public int reverseBits(int n) {
int res = 0;
for (int i=0;i<32;i++) {
res <<= 1; // res 左移一位,给 n 的最后一位留出位置, res =res << 1
res += n & 1; // n 和 1 与,取出 n 的最后一位,放在 res 的最后一位,res =res + (n & 1)
n >>= 1; // n 右移一位,把已经挪到 res 中的最后一位释放掉,n=n >> 1
}
return res;
}
}
代码步骤过程举例:
n=10001101
res=00000000 n&1=1 res=00000001 n=01000110
res=00000010 n&1=0 res=00000010 n=00100011
res=00000100 n&1=1 res=00000101 n=00010001
res=00001010 n&1=1 res=00001011 n=00001000
res=00010110 n&1=0 res=00010110 n=00000100
res=00101100 n&1=0 res=00101100 n=00000010
res=01011000 n&1=0 res=01011000 n=00000001
res=10110001 n&1=1 res=10110001 n=00000000