首页 > 其他分享 >朱有鹏:寄存器修改指定位或多个不连续位,左移<< 设置特定二进制数

朱有鹏:寄存器修改指定位或多个不连续位,左移<< 设置特定二进制数

时间:2023-03-23 23:44:37浏览次数:41  
标签:朱有鹏 23 二进制 左移 修改 寄存器 0x1F 位为

一:设置连续,特定位为1

问:假设要有一组32位的二进制数,要修改其中 3~7bit 位的位为1 (其他位为0),该如何写?

  推算:  7-3+1 (第7位减去第3位,加1是公式必须这样这么写,先获取要修改几位) 结果是 5位。

  5位二进制1,转十六进制是0x1F , 将 1F 左移3位(为什么要移3位,因为题目中是修改第3位,如果不左移就是从第0位开始)

  代码: 0x1F << 3

  下图: 值是 0x1F

 

   下图:值左移3位

 

 

 二:设置不连续,特定位为1

 问:假设要有一组32位的二进制数,要修改其中 3~7bit 位的位为1  ;  23~25bit 位的位也为1(其他位为0),这两组该如何写?

 

  推算: 

  7-3+1 (第7位减去第3位,加1是公式必须这样这么写,先获取要修改几位) 结果是 5位。

 

  5位二进制1,转十六进制是0x1F , 将 1F 左移3位(为什么要移3位,因为题目中是修改第3位,如果不左移就是从第0位开始)


  25-23+1(第25位减去第23位,加1是公式必须这样这么写,先获取要修改几位) 结果是 3位。

  3位二进制1,转十六进制是0x7 , 将 7 左移23位(为什么要移23位,因为题目中是修改第23位,如果不左移就是从第0位开始)

  

  代码: ((0x1F << 3) | (0x7<<23))

 

--------------------------------------------------------------------------------------------------------------------------------------

以上两个方法,在1或者0多的时候,计算繁琐,建议使用下面 ”位取反“ 方式,是比较聪明的方式

--------------------------------------------------------------------------------------------------------------------------------------

三、设置连续,特定位为1(位取反方式)(推荐使用)

:假设要有一组32位的二进制数,要修改其中 4~10bit 位的位为1 (其他位为0),该如何写?

  推算: 

  10-4+1 (第10位减去第4位,加1是公式必须这样这么写,先获取要修改几位) 结果是 7位。

  7位二进制1,转十六进制是0x7F , 将 7F 左移3位(为什么要移4位,因为题目中是修改第4位,如果不左移就是从第0位开始)

  代码: ~(0x7f<<4)

 

 

 

 

来源:

朱有鹏-嵌入式软件工程师完全学习路线图专题\4.C语言高级专题精讲视频课程套餐\4.2.C语言位操作\4.2.3.如何用位运算构建特定二进制数.mp4

 

标签:朱有鹏,23,二进制,左移,修改,寄存器,0x1F,位为
From: https://www.cnblogs.com/wutou/p/17249738.html

相关文章

  • 寄存器修改指定位不影响其他位, 位与&、位或|、位异或^
    一、位与&(位清零用)位与特点:任何数(0或1),和1,位与无变化;和0,位与变成0真值表: 1&1=1   0&0=0  1&0=0   0&1=0代码:#include<stdio.h>intmain(void){u......
  • 什么是寄存器和存储器?寄存器与存储器有何区别?
    中央处理器CPU是单片机的核心,主要用来解译单片机指令以及处理计算机数据,内部结构大致可以分为控制单元、逻辑运算单元和存储单元三个部分,存储器和寄存器在计算机中起着不可......
  • 汇编 标志寄存器 ZF/PF/SF/CF/OF标志 adc/sbb/cmp指令 pushf和popf 检测比较结果
    标志寄存器CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能)具有以下3中作用。用来存储相关指令的某些执行结果。用来为CPU执行相关指令提供行为依据......
  • 关于OV5640的重要寄存器配置问题
    最近在做ZYNQ的图像处理的学习,一直用的导入图片的方式进行了,现在想用摄像头试试真实的情况,总结一下几个重要寄存器的配置问题最重要的当然输出的图像分辨率,下面是输出图......
  • 常见寄存器与汇编指令
    学习ctf中RE模块必须掌握的寄存器通用寄存器32位16位作用EAX(累加器)AX作用于操作数和结果的数据EBX(基址寄存器)BXDS段中的数据指针ECX(计数器)CX用......
  • stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
    文章目录​​一、STM32串口常用寄存器和库函数​​​​1.1常用的串口寄存器​​​​1.2串口相关的库函数​​​​1.3状态寄存器(USART_SR)​​​​1.4数据寄存器(USART_D......
  • 1.2 CPU是寄存器的集合体
    1.程序是把寄存器当作对象来描述的。2.汇编语言采用助记符来编写程序。3.机器语言是指CPU可以直接解释和执行的语言。  通过上面这个代码例子可以看出:机器语言级别......
  • 常见寄存器
    寄存器名寄存器简介主要功能63-031-015-08-0rax累加器,是算术运算的主要寄存器存储返回值raxeaxaxalrbx基址寄存器,被调用者保存存放存储区的起始......
  • 1.2 CPU是寄存器的集合体
    1.程序是把寄存器当作对象来描述的。2.汇编语言采用助记符来编写程序。3.机器语言是指CPU可以直接解释和执行的语言。4.汇编语言和机器语言基本上是一一对应的。 通......
  • 都在说测试左移和右移,只有这篇文章说明白了
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 大家......