c语言-常用寄存器位操作总结(代码片段)

一地鸡毛 一地鸡毛     2022-12-01     437

关键词:

STM32学习笔记-常用寄存器操作

常用的寄存器位操作总结

1. 常用的位操作

操作 含义
& 相同为1,不同为0
| 不同为1,相同为0
^ 异或 相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 左移若干位,高位丢弃,低位补0
>> 右移 右移若干位,正数补0,负数补1

2. 把变量的某位清零

//定义一个变量 a = 1001 1111 b (二进制数)
unsigned char a = 0x9f;

//对 bit2 清零

a &= ~(1<<2);

//括号中的 1 左移两位,(1<<2)得二进制数:0000 0100 b
//按位取反,~(1<<2)得 1111 1011 b
//假如 a 中原来的值为二进制数: a = 1001 1111 b
//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b),
//经过运算后,a 的值 a=1001 1011 b
// a 的 bit2 位被被零,而其它位不变。

3. 把变量的某几个连续位清零


//若把 a 中的二进制位分成 2 个一组
//即 bit0、bit1 为第 0 组,bit2、bit3 为第 1 组,
// bit4、bit5 为第 2 组,bit6、bit7 为第 3 组
//要对第 1 组的 bit2、bit3 清零

a &= ~(3<<2*1);

//括号中的 3 左移两位,(3<<2*1)得二进制数:0000 1100 b
//按位取反,~(3<<2*1)得 1111 0011 b
//假如 a 中原来的值为二进制数: a = 1001 1111 b
//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),
//经过运算后,a 的值 a=1001 0011 b
// a 的第 1 组的 bit2、bit3 被清零,而其它位不变。

//上述(~(3<<2*1))中的(1)即为组编号;如清零第 3 组 bit6、bit7 此处应为 3
//括号中的(2)为每组的位数,每组有 2 个二进制位;若分成 4 个一组,此处即为 4
//括号中的(3)是组内所有位都为 1 时的值;若分成 4 个一组,此处即为二进制数“1111 b”

//例如对第 2 组 bit4、bit5 清零
a &= ~(3<<2*2);

3. 对变量的某几位进行赋值。

//a = 1000 0011 b
//此时对清零后的第 2 组 bit4、bit5 设置成二进制数“01 b ”

a |= (1<<2*2);
//a = 1001 0011 b,成功设置了第 2 组的值,其它组不变

4. 对变量的某位取反

//先清零
//a = 1001 0011 b
//把 bit6 取反,其它位不变

a ^=(1<<6);
//a = 1101 0011 b

modbus常用功能码协议(代码片段)

01H-读线圈状态CoilStatus1)描述:读从机线圈寄存器,位操作,可读单个或者多个;2)发送指令:假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x0038,总共读取21个线圈。协议图如下:从机地址功能码寄存器起始地... 查看详情

c语言位操作(代码片段)

C语言位操作一、常用位操作符位与&无符号数有符号数位或|逻辑左移<<算数左移<<位异或^逻辑右移>>算数右移>>位取反~1、位与真值表:&010001013&5=?​0b0011(3)&0b0101(5)=... 查看详情

c语言位操作(代码片段)

C语言位操作一、常用位操作符位与&无符号数有符号数位或|逻辑左移<<算数左移<<位异或^逻辑右移>>算数右移>>位取反~1、位与真值表:&010001013&5=?​0b0011(3)&0b0101(5)=... 查看详情

c语言:寄存器操作(代码片段)

C语言:寄存器操作在对芯片进行开发时,我们对芯片的操作本质上就是对芯片底层寄存器进行操作,在C语言中对寄存器进行操作则是通过寄存器的地址进行数据的赋值,那这个过程是如何实现的呢?我们在学... 查看详情

c语言操作符学习总结(代码片段)

c语言中关于操作符部分的学习,可以主要分为两个部分:操作符和表达式。这里首先是列举各种操作符,在C语言中,一般主要的操作符有这么几种:算数操作符,移位操作符,位操作符,赋值操作符,单目运算符,关系操作符... 查看详情

r语言dataframe的常用操作总结(代码片段)

前言:近段时间学习R语言用到最多的数据格式就是data.frame,现对data.frame常用操作进行总结,其中函数大部分来自dplyr包,该包由HadleyWickham所作,主要用于数据的清洗和整理。一、创建data.frame创建较为容易,调用data.frame函数即... 查看详情

c语言操作符详解(代码片段)

C语言操作符详解文章目录C语言操作符详解1C语言位操作符1.1右移操作符>>1.2左移操作符<<1.3位操作符(&|^)1.4sizeof操作符1.5~按位取反1C语言位操作符1.1右移操作符>>右移操作符包括下面两种1.算术右移右边... 查看详情

那些一看就会一放就忘的c语言知识(代码片段)

...用|操作符设值。比如,我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作:然后再与需要设置的值进行|或运算:1.2移位操作提高代码的可读性。移位操作在开发中非常重要,下面是delay_init函数的一行代... 查看详情

2019-2020学期20192404《网络空间安全专业导论》第三周学习总结(代码片段)

...构成。这些字节从0到65536(十进制)进行编号。Pep8七个寄存器中的三个寄存器程序计数器(PC),其中包含下一条即将被执行的指令的地址。指令寄存器(IR),其中包含正在被执行指令的一个副本。累加器(是一个寄存器)。指令... 查看详情

位操作基础篇之位操作全面总结(代码片段)

Title:      位操作基础篇之位操作全面总结Author:    MoreWindowsE-mail:     [email protected]KeyWord:  C/C++位操作位操作技巧判断奇偶交换两数变换 查看详情

《c程序设计语言》练习2-6及位运算总结(代码片段)

问题描述  2.6编写一个函数setbits(x,p,n,y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。  Writeafunction setbits(x,p,n,y) thatreturns x withthe... 查看详情

关于c语言操作符的总结(代码片段)

整理了一些C语言中的操作符,简单介绍了一下部分重要操作符,也算学习操作符的一些收获吧。一、C语言操作符分类算数操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符二、... 查看详情

阅读笔记《c程序员从校园到职场》第六章常用文件操作函数(part1)(代码片段)

...haoxiong1227/article/details/24926023让你提前认识软件开发(18):C语言中常用的文件操作函数总结及使用方法演示代码-CSDN博客  Contents:1.C语言中常用的文件操作函数总结(1)fopen  作用:打开文件(2)fclose 作用:关闭 查看详情

pic16f877xa指令系统(汇编语言)(代码片段)

...bittest指令系统补充字符说明字符功能说明英文全称W工作寄存器(即累加器)-f寄存器地址(取7位寄存器地址,00H~7FH)-b8位寄存器f内位地址(0~7)bitK立即数(8位常数或11位地址)、常量或标号-L指令操作数中含有8位立即数K-d目标... 查看详情

小边同学强势总结之c语言操作符(代码片段)

目录一览引:一、操作符分类二、算术操作符三、移位操作符1.左移原理剖析2.右移原理剖析(1)右移正数a:(2)右移负数a:3.注:四、位操作符1.原理剖析2.典例3.变态面试题五、赋值操作符六、单目操作符七、关系操作符八、... 查看详情

计算机组成原理考点总结1(代码片段)

...令中直接给出操作数D、间接寻址给出操作数的内存地址3.寄存器寻址方式是指:A、给出的寄存器中存放的是操作数所在的寄存器编号B、操作数的内存地址在寄存器中C、操作数在给出的寄存器中D、操作数的内存地址的地址在... 查看详情

修改寄存器的位操作方法

使用C语言对寄存器赋值时,我们常常要求只修改该寄存器的某几位的值,且其它的寄存器位不变,这个时候我们就需要用到C语言的位操作方法了。1.把变量的某位清零此处我们以变量a代表寄存器,并假设寄存器中本来已有数值... 查看详情

android逆向基础之arm汇编语言知识总结(代码片段)

文章目录前言ARM32汇编1.1寄存器1.2寻址方式1.3汇编指令1.4代码识别1.5IDA示例ARM64汇编2.1寄存器2.2变址寻址方式2.3常用汇编指令2.4实例程序分析总结前言X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086... 查看详情