颠倒二进制位---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

posted @ 2021-03-30 19:02  网抑云黑胶SVIP用户  阅读(73)  评论(0编辑  收藏  举报