栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣第190题“颠倒二进制位”的解题思路

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣第190题“颠倒二进制位”的解题思路

参考代码:

public class Solution {
    public int reverseBits(int n) {
        int ret = 0;
        int count = 32;
        while (count-- > 0) {
            int lastBit = n & 1; 
            ret = ret << 1 | lastBit; 
            n = n >> 1; 
        }
        return ret;
    }
}

题目的意思是要将整个二进制数进行一个翻转,100->001,10111->11101。

需要用到位运算:

与&:有一个不是1,结果都是,0,0&0=0 0&1=0 1&0=0 1&1=1;

或|:有一个是1,结果都是1,0|0=0 0|1=1 1|0=1 1|1=1;

异或^:两个位只要不一样就是1,否则为0,0^0=0 0^1=1 1^0=1 1^1=0;

取反~:原来是1变为0,0变为1,~1=0 ~0=1;

左移<<:左边的二进制位丢弃,右边补0

右移>>:正数左补0,负数左补1,右边丢弃

无符号左移<<<:左边的二进制位丢弃,右边补0

无符号右移>>>:忽略符号位,空位都以0补齐

int lastBit = n & 1; 获取n最后一位;

ret = ret << 1 | lastBit; 将结果左移一位再添加n的最后一位

n = n >> 1; n右移减少一位

循环再次获取n的最后一位,再加到ret的结尾

不断重复,直至完全颠倒。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/738823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号