LeetCode190.颠倒二进制位

本文详细介绍了三种位反转的方法:位运算、bitset函数及字符串反转函数。通过具体的代码实例,展示了如何利用位运算高效实现位反转,如何借助bitset函数进行位操作,以及如何运用字符串反转函数完成位序列的翻转。这些方法对于理解和掌握位操作具有重要作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
方法 一:位运算
例:
假如n为四为数,循环四次,高位为0右移前端补0,为1右移前端补1,左移后端补0
n = 1010
res = 0000;
n = 1101;
res =0000;
n = 1110;
res = 0001;
n = 1111;
res = 0010;
n = 1111;
res = 0101;

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        uint32_t res = 0;
        for(int i = 0; i < 32; i++){//同过将参数的最后一个值加给res,res右移达到反转
            res<<=1;//返回值向左移
            res+=n&1;//每次取参数值最后一位加给res
            n>>=1;//将参数值右移
        }
        return res;
    }
};

方法二:bitset函数使用

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        bitset<32> b=n;//将n存储在bitset中
        for(int i=0;i<16;i++)//bitset类似数组可以实现交换,右n中只有0和1,所以如果前后交换值不等两个取反即可
        {
            if(b[i]!=b[31-i])
            {
               // b[i]=!b[i];
               // b[31-i]=!b[31-i];
               b.flip(i);
               b.flip(31-i);
            }
        }
        return b.to_ulong();//将bitset转换成unsigned long类型
    }
};

方法三:使用
string反转函数

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
         string str = bitset<32>(n).to_string();//先构造bitset类,使用to_string函数转换为String类
         reverse(str.begin(),str.end());//使用string反转函数
         return bitset<32>(str).to_ulong();//在转换为bitset类,再转换为无符号长整形
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baal Austin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值