当前位置:网站首页>位操作==c语言2
位操作==c语言2
2022-07-07 07:10:00 【栋哥修炼日记】
一、位操作符
1、位与&
- 注意:位与&,逻辑&&。
举例0xAA&0xF0=0xA0,0xAA && 0xF0=1
2、位或|
- 注意:位或是|,逻辑或是||
3、位取反~
- 注意:C语言中位取反是~,逻辑取反是!。
4、位异或^
- 0或1与1位异或就会取反,0或1与0位异或则不变、
5、位左移、位右移
- 对于无符号数:
- 左移时右侧补0,相当于逻辑移位。
- 右移时左侧补0,相当于逻辑移位。
- 对于有符号数:
- 左移时右侧补0,叫算术移位,相当于逻辑移位。
- 有右移时左侧补符号位,正数补0负数补1,叫算术移位。
- 嵌入式中使用的移位都是无符号数移位。
二、&,|,^在操作寄存器时的特殊作用
1、寄存器的操作要求
- ARM是内存与IO统一编制的(x86则不是),读写寄存器就是操控硬件。
- 如何做到设定特定位时不影响其它位?
答案是:读-改-写三部曲。
2、特定位清零用&
3、特定位置1用|
4、特定位取反用^
三、如何用位运算构建特定二进制数
1、寄存器操作经常需要特定位给特定值(“改”的过程中)
- 解法1:用工具软件或自己大脑计算,直接给出32位特定数
- 解法2:自己写代码用位操作符号来构建
2、使用移位获取特定位为1的二进制数
- 譬如需要一个bit3~bit7为1的二进制数:(0x1f << 3)。
- bit3 ~ bit7为1,同时bit23 ~ 25也为1:((0x1f << 3) | (7 << 23))。
3、结合取反获取特定位为0二进制数
- 获取bit4 ~ bit10为0,其余为1的数:~(0x7f << 4)
4、总结:“改”的过程用&、|、^结合特定二进制数即可完成
四、位运算实战演练
1、给定一个整形数a,取出a的bit3~bit8
- 第一步:a &= (0x3f << 3);
- 第二步:a >>= 3;
2、给定一个整形数a,给a的bit7~bit17赋值937
- 第一步:a &= ~(0x7ff << 7); // 特定位置0
- 第二步:a |= (937 << 7); // 特定位赋值
3、给定一个整形数a,给a的bit7~bit17中的值加17
- 第一步:b = a & (0x7ff << 7); b >>= 7; // 取出该值
- 第二步:b += 17; // 加上17
- 第三步:a &= ~(0x7ff << 7); // 特定位清0
- 第四步:a |= (b << 7); // 特定位赋值
五、技术升级:用宏定义来完成位运算
1、直接用宏定义来置位、复位
- #define SET_NTH_BIT(x,n) ((x) |= ((1U)<<(n)))
- #define CLEAR_NTH_BIT(x,n) ((x) &=~((1U)<<(n)))
2、用宏定义来截取变量的部分连续位,
- 例如截取变量0x88(10001000b)的bit2~bit4
- #define GRTBITS(x,n,m) ( ( (x) & ~( ~(0U) << ((m) – (n) + 1)) ) << (n) ) >> (n) )
边栏推荐
- [4g/5g/6g topic foundation-146]: Interpretation of white paper on 6G overall vision and potential key technologies-1-overall vision
- 14th test
- Applet popup half angle mask layer
- 第一讲:鸡蛋的硬度
- Unity uses mesh to realize real-time point cloud (I)
- thinkphp数据库的增删改查
- Impression notes finally support the default markdown preview mode
- NETCORE 3.1 solves cross domain problems
- Unity shader (pass user data to shader)
- Basic chapter: take you through notes
猜你喜欢
![[4G/5G/6G专题基础-147]: 6G总体愿景与潜在关键技术白皮书解读-2-6G发展的宏观驱动力](/img/21/6a183e4e10daed90c66235bdbdc3bf.png)
[4G/5G/6G专题基础-147]: 6G总体愿景与潜在关键技术白皮书解读-2-6G发展的宏观驱动力

VSCode+mingw64

Basic chapter: take you through notes

H5 web player easyplayer How does JS realize live video real-time recording?
![[original] what is the core of programmer team management?](/img/11/d4b9929e8aadcaee019f656cb3b9fb.png)
[original] what is the core of programmer team management?

Vs2013 generate solutions super slow solutions

一大波开源小抄来袭
![[4g/5g/6g topic foundation-146]: Interpretation of white paper on 6G overall vision and potential key technologies-1-overall vision](/img/fd/5e8f74da25d9c5f7bd69dd1cfdcd61.png)
[4g/5g/6g topic foundation-146]: Interpretation of white paper on 6G overall vision and potential key technologies-1-overall vision

【frida实战】“一行”代码教你获取WeGame平台中所有的lua脚本

第一讲:包含min函数的栈
随机推荐
Can't connect to MySQL server on '(10060) solution summary
2016 CCPC Hangzhou Onsite
Binary tree high frequency question type
asp. How to call vb DLL function in net project
Thinkphp3.2 information disclosure
# Arthas 简单使用说明
20排位赛3
How to become a senior digital IC Design Engineer (5-2) theory: ULP low power design technology (Part 1)
flinkcdc采集oracle在snapshot阶段一直失败,这个得怎么调整啊?
Esp8266 uses TF card and reads and writes data (based on Arduino)
Scratch crawler mysql, Django, etc
csdn涨薪技术-浅学Jmeter的几个常用的逻辑控制器使用
洛谷P2482 [SDOI2010]猪国杀
Oracle installation enhancements error
Niuke - Huawei question bank (61~70)
Switching value signal anti shake FB of PLC signal processing series
Deep understanding of UDP, TCP
第一讲:寻找矩阵的极小值
Strategic cooperation subquery becomes the secret weapon of Octopus web browser
Unity uses mesh to realize real-time point cloud (I)