zoukankan      html  css  js  c++  java
  • 【LeetCode】190. Reverse Bits

    题目:

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

    示例 1:

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

    示例 2:

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

    思路:

    跟上篇文章一样

    #include <stdio.h>
    #include <stdint.h>
    #include <inttypes.h>
    
    uint32_t reverseBits(uint32_t n) {
        uint32_t m_1 = 0x55555555;
        uint32_t m_2 = 0x33333333;
        uint32_t m_4 = 0x0f0f0f0f;
        uint32_t m_8 = 0x00ff00ff;
        uint32_t m_16 = 0x0000ffff;
    
        uint32_t a = ((n & m_16) << 16) + ((n >> 16) & m_16);
        uint32_t b = ((a & m_8) << 8) + ((a >> 8) & m_8);
        uint32_t c = ((b & m_4) << 4) + ((b >> 4) & m_4);
        uint32_t d = ((c & m_2) << 2) + ((c >> 2) & m_2);
        uint32_t e = ((d & m_1) << 1) + ((d >> 1) & m_1);
    
        return e;
    }
    
    int main()
    {
        uint32_t n = 00000000000000000000000000001011;
        uint32_t a1 = reverseBits(n);
        uint32_t a2 = reverseBits(a1);
        printf("%" PRIu32 "
    ",a1);
        printf("%" PRIu32 "
    ",a2);
        return 0;
    }

    结果:


    参考:一起玩算法05

    推荐一位干货up主:正月点灯笼

  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433594.html
Copyright © 2011-2022 走看看