zoukankan      html  css  js  c++  java
  • LeetCode位操作系列(1)——位操作在第190题中的运用

    题目描述:

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

    示例 1:

    输入: 00000010100101000001111010011100
    输出: 00111001011110000010100101000000

    解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
    因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。

    示例 2:

    输入:11111111111111111111111111111101
    输出:10111111111111111111111111111111

    解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
      因此返回 3221225471 其二进制表示形式为 10101111110010110010011101101001。

    提示:

    请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
    在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。

    解题思想:

    首先根据我们前面的知识,我们知道输入数n通过和1与可以知道n的最地位是否是1。

    方法1:

    • 我们设定结果记录在ans,每次让n&1,,如果等于1,说明n这一位是1,所以ans+1,;当结果为0时,让ans+0;
    • 然后将n右移一位,ans左移一位,这样就可以实现翻转了。

    Java代码实现:

    public int reverseBits(int n) {
    
            int ans=0;
            
            for(int i=0;i<32;i++){
                ans<<=1;
                ans+=(n&1);
                n>>=1;
            }
            return ans;
    }

    方法2:

    • 其实就是方法1的反方法,我们将n固定,然后设定一个最高位为1的数reader,然后结果需要加的数builder为1,每次判断n这一位是不是1,如果是,result+=builder,如果不是,result+=0;
    • 然后reader右移一位,builder左移一位,知道循环32次。

    C++代码实现:

    uint32_t reverseBits(uint32_t n) 
    {
        uint32_t result = 0;
        //这里貌似没有 C# 一般的要求
        uint32_t reader = (1 << 31);
        uint32_t builder= 1;
        for(int i = 0; i < 32;i++)    
        {
            result += ((n & reader) != 0 ? builder : 0);
            reader /= 2;//也可以 reader = reader >> 1;
            builder *= 2;//也可以 builder = builder << 1;
        }
        return result;
    }

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-bits
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/SupremeBoy/p/12271272.html
Copyright © 2011-2022 走看看