2.4.位运算实战演练1
来源:互联网 发布:学钢琴 知乎 编辑:程序博客网 时间:2024/06/06 14:17
2.4.位运算实战演练1
1.给一个整形数a,设置a的bit3,保证其他位不变
分析:
第一步:设置 a 的 bit3
a | = 1<<3
2.给一个整形数a,设置a的bit3-bit7,保证其他位不变
分析:
第一步:从bit3 -bit7共5位 ,先设置bit0-bit4
第二步:bit0-bit4左移到bit3-bit7
第三步:寄存器中原来的数和新构建的特定数位或
a | =0x1f<<3
3.给一个整形数a,清除a的bit15,保证其他位不变
分析:
第一步:清除bit15,则bit15是0,其他位是1
第二步:要构建的特定数1多0少,则使用取反 ~ , bit15是1,其他位是0,再取反
a & = ~(0x1<<15)
4.给一个整形数a,清除a的bit15-bit23,保证其他位不变
分析:
第一步:清除bit15-bit23,则bit15-bit23是0,其他位是1
第二步:要构建的特定数1多0少,则使用取反 ~ , bit15-bit23是1,其他位是0,再取反
第三步:寄存器中原来的数和新构建的数位与
a & =~(1ff<<15)
5.给定一个整形数a,取出a的bit3-bit8
分析:
第一步:除了bit3-bit8其他位清零,只保留需要的位上的数
第二步:将bit3-bit8右移3位
a & =(0x3f<<3); //清除除了bit3-bit8的位 a >>=3; //右移到最低位进行读取
6.用C语言给寄存器的bit7-bit17赋值937(其他位不能受影响)
注意:我们不知道寄存器中bit7*bit17原来的,就无法构建特定的二进制数
思路:
第一步:先将bit7-bit17清零
第二步:在写入937
a &= ~0x7ff<<7; //清零 a |= 937<<7 //写入937
7.给bit7-bit17中的值加17(其他位不受影响)
思路:
第一步:先读出bit7-bit17中的值
第二步:增加17
第三步:寄存器bit7-bit17清零
第四步:写入第二步中算出的数
//第一步:把寄存器中的bit7-bit17取出来来放到tem中 tem = a & (7ff<<7) //右移到最低位并读出原来的数 tem >>=3; //第二步:增加17 tem +=17; //第三步:寄存器bit7-bit17清零 a &=~(0x7ff<<7); //第四步:写入 a |=tem<<7;
8.给寄存器bit7-bit17赋值937,同时给bit21-bit25赋值17
思路:第一步:先将bit7-bit17,bit21-bit25清零
第二步:得出937和17的对应的位
第三步:写入
//原来寄存器中的数 unsigned int a =0xffffffff; //第一步:清零bit7-bit17,bit21-bit25 a &=~((0x7ff<<7)|(0x1f<<21)) //第二步:算出937和17以及其所对应的位,并写入 a |=(937<<7)|(17<<21)
9.思考:如何给寄存器bit7-bit17增加7,同时给bit21-bit25增加17?
- 2.4.位运算实战演练1
- 19.位运算实战演练
- 2.5.位运算实战演练2--技术升级:用宏定义来完成位运算
- 位运算(实战篇)
- samba3.0实战演练
- 实战演练Autotools
- dojo实战演练
- leetcode 实战演练
- OpenStack实战演练
- 19 实战演练:画板
- Python BeautifulSoup 实战演练
- UIScrollView实战演练
- Storm实战演练:WordCont
- WebGIS 实战演练
- Appium之实战演练
- JavaScript实战演练1.1
- JavaScript实战演练1.2
- javascript实战演练笔记
- java中读取输入的方式
- 友盟分享中分享到微信只有文字信息没有要跳转的链接
- 最新方法制作自己的cocoapods开源框架的详细步骤
- el表达式
- listview 常见的优化和使用技巧
- 2.4.位运算实战演练1
- 拖动UIScrollView时的delegate调用调用顺序
- android studio 导入第三方开源框架/项目,第三方Jar包
- Easy-题目61:6. ZigZag Conversion
- Openstack Neutron学习手册(by qiqishuang csdn)
- 映射 关联关系
- 23中设计模式-行为型1-观察者模式
- 刷刷笔试题~~(3)
- Easy-题目62:228. Summary Ranges