当前位置: 首页 > news >正文

位运算的应用3(获取⼆进制中的指定位、leetcode 190.颠倒二进制位)

当我们需要获取⼀个整数 x 的⼆进制中第 i 位(从低到⾼,以最低位为第 0 位)是 1 还是 0 的时候,我们可以对 x 做这样的运算: (x >> i) & 1 ,如果结果是 0 ,表⽰第 i 位是 0 ,如果结果是 1 ,表⽰第 i 位是
  • 确定 x =00101011 的第 3 位的值,只需要将x=00101011 右移 3 位,第 3 位就到最低位,然后和 1 进⾏按位与运算即

题目链接:190. 颠倒二进制位 - 力扣(LeetCode)

1.题目

2.算法原理 

我们知道最低位会到最高位,最高位会来到最底位,完成一次颠倒,想象一下以最低位为例,首先要获得这一位,0下标的元素取到31下标,可以获得这一位之后,整体向左移动31位,下标1也要获取,向左移动30位就到下标30了,获取n的第一个2进制位,n&1,第二个二进制位(n>>1)&1,第32个二进制位,(n>>31)&1,n总共是32位,(n>>i)&1,移动完后,用或|,赋值给ret,ret = | (b<<31);

代码:

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        uint32_t ret = 0;
        //处理32个二进制位
        for(int i = 0; i < 32; ++i)
        {
            //获取n中的一个二进制位存到b里
            uint32_t b = (n >> i) & 1;
            //对最低位来说向左移动31位,依此递减,最高位向左移动0位
            //产生的二进制位b放到ret里,0|a=a
            ret |= (b << (31 - i));
        }
        return ret;
    }
};

应⽤场景(仅了解)

⽐如:在嵌⼊式系统中,传感器通常通过寄存器返回数据。某些寄存器可能包含多个信息字段,例如状态标志、错误代码等。这些字段往往位于寄存器的特定位中,需要通过获取指定位的值来读取。
假设有⼀个传感器状态寄存器,其中:
  • 位0-2:传感器状态代码
  • 位3:是否存在错误         
  • 位4-7:保留
unsigned char sensorRegister = 0x0B; // ⼆进制: 00001011
//获取状态代码
sensorRegister & 0x07; //0111
//获取错误标志
(sensorRegister >> 3) & 0x1;
  • 我们可以提取状态代码和错误标志来判断传感器的状态

相关文章:

  • Word 小黑第15套
  • Linux_16进程地址空间
  • 音视频软件工程师面试题
  • JDK安装过程中误删path怎么办?
  • 开发、科研、日常办公工具汇总(自用,持续更新)
  • 一个基于LSTM的字符级文本生成模型的训练+使用(pytorch)
  • 【threejs实战教程一】初识Three.js,场景Scene、相机Camera、渲染器Renderer
  • mysql索引机制深度剖析
  • SVT-AV1源码分析函数 svt_av1_optimize_b
  • react中字段响应式
  • 简述你对 Spring MVC 的理解
  • GRU门控循环单元
  • android用java设置button之间的间距 笔记250311
  • 高效微调算法 (Parameter-Efficient Fine-tuning, PEFT) 详解
  • 深度学习与大模型-张量
  • 一键换肤的Qt-Advanced-Stylesheets
  • Linux账号和权限管理
  • 【Spring】AOP在实际项目中的运用
  • 程序化广告行业(6/89):现状、未来与核心要点剖析
  • 使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题
  • 欧洲史上最严重停电事故敲响警钟:能源转型如何保证电网稳定?
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 四问当前旱情:还会持续多久
  • 央行:5月15日起下调金融机构存款准备金率0.5个百分点
  • 美国内政部长:今年夏天美国可能发生西班牙式大停电,全怪拜登
  • 魔都眼|上海环球马术冠军赛收官,英国骑手夺冠