美文网首页
颠倒给定的 32 位无符号整数的二进制位

颠倒给定的 32 位无符号整数的二进制位

作者: 段段小胖砸 | 来源:发表于2021-06-24 10:27 被阅读0次

    题目:(力扣第190题)


    image.png

    效果图:


    image.png

    思路:一开始看到这个题,是想着先用把输入的十进制数字转换成2进制,然后再把二进制转成字符串然后转换为数组,再将二进制数组倒着排列一下,然后再转为10进制。一开使用的Integer.toBinaryString(),将十进制转为二进制,反转之后转为10进制发现输出不正确,然后断点检查发现十进制转成的2进制不是32位的,而是

    10100101000001111010011100    ----  java使用Integer转
    00000010100101000001111010011100     ----  题目实例中的二进制
    

    就是前面的0被省略了,那么反转过来的二进制数组肯定就会有变化,所以就只能想其他办法。然后就用了前面文章写到的整数反转中的方案三,取模除十累加。

    十进制:ans = ans * 10 + n % 10; n = n / 10;
    二进制:ans = ans * 2 + n % 2; n = n / 2;
    乘以2 可以通过向左位移一位实现,
    除以2 可以通过向右位移一位实现

    算法思维:数学思维:取模、累加

     public int reverseBits(int n) {      
             // 在此处写入代码
            int res = 0;
            for (int i = 0; i < 32; i++) {
                res = (res << 1) + (n & 1);
                n >>= 1;
            }
            return res;
        }
    

    相关文章

      网友评论

          本文标题:颠倒给定的 32 位无符号整数的二进制位

          本文链接:https://www.haomeiwen.com/subject/aolwyltx.html