zoukankan      html  css  js  c++  java
  • 【简单算法】46.颠倒二进制位

    颠倒给定的 32 位无符号整数的二进制位。
    
    示例:
    
    输入: 43261596
    输出: 964176192
    解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,
         返回 964176192,其二进制表示形式为 00111001011110000010100101000000 。
    进阶:
    如果多次调用这个函数,你将如何优化你的算法?

    解题思路:

    1.循环交换位,交换16次即可。第i位与第33-i位交换。

    代码如下:

    class Solution {
    public:
        int bit_test(uint32_t x,uint32_t n){
            return (x&(1<<n))>>n;  
        }
        
        bool bit_clear(uint32_t &x,uint32_t n){
            x = x&(~(1<<n));
            return true;
        }
        
        bool bit_set(uint32_t &x,uint32_t n){
            x = x|(1<<n);
            return true;
        }
        
        uint32_t reverseBits(uint32_t n) {
            
            for(int i = 0; i <= 15;++i){
                uint32_t bit1 = bit_test(n,i);
                uint32_t bit2 = bit_test(n,31-i);
                bit_clear(n,i);
                bit_clear(n,31-i);
                if(bit1){
                    bit_set(n,31-i);
                }
                if(bit2){
                    bit_set(n,i);
                }            
            }
            
            return n;
        }
    };

    2.将该数所有的位顺序颠倒即可(移位方向相反),即将原来的100变为001.

    uint32_t reverseBits(uint32_t n) {
            uint32_t m=0;
            for(int i=0;i<32;i++){
                m<<=1;//m向左移1位;
                m = m|(n & 1);//m的末位设置为n的末位
                n>>=1;//n向右移1位
            }
            return m;
    }
  • 相关阅读:
    git配置公钥,私钥
    vscode之vue文件代码格式化代码无效解决办法
    [python 并行3]进程
    [spring 并行6]分布式
    [spring 并行5]GPU
    [python 并行2]线程
    [spring 并行4]异步
    [python 并行1]简介
    [flask] flask api + vue 跨域问题
    [spring学习4] MVC
  • 原文地址:https://www.cnblogs.com/mikemeng/p/9000277.html
Copyright © 2011-2022 走看看