寄存器某一位置位或者清零
来源:互联网 发布:江恩时间周期理论,知乎 编辑:程序博客网 时间:2024/06/01 08:37
Linux系统宏定义: #define BIT_MASK(nr) ( 1UL << ( (nr) % BITS_PER_LONG) )
应用一:将寄存器中的某一位置1或则清0,保持其他位不变。
int l_data;void SetBit(int pos)//将某一位置位的操作{if((pos >= 0) && (pos <= 31)){l_data |= BIT_MASK(pos);//BIT_MASK是 掩码。就是除了这一位其余位均为0}}void ClrBit(int pos)//将某一位清0的操作{if((pos >= 0) && (pos <= 31)){l_data &= ~BIT_MASK(pos);}}
说明:
该操作的依据如下:
1.0|1 == 1,1|1 == 1,故无论0还是1同1执行|操作,结果为1;无论0还是1同0执行|操作,都将保持不变。
2.1&0 == 0,0&0 == 0,故无论0还是1同0执行&操作,结果为0;无论0还是1同1执行&操作,都将保持不变。
应用二、判断寄存器某一位为0还是1
bool is1(int pos)//判断某一位是否为1{if((pos >= 0) && (pos <= 31)){if(l_data & (BIT_MASK(pos)) == 0x1){return true;}else{return false;}}}
应用三、将寄存器的某一位取反(1->0;0->1)
void ReverseBit(int pos)//将某一位取反{if((pos >= 0) && (pos <= 31)){l_data ^= BIT_MASK(pos);}}
说明:与0异或,保持不变;与1异或,取反。
应用四、保留2个数的不同部分,将它们合并为1个数
方法一:这两个数除了有效位之外,其他位均为0,可以将其先适当移位操作,然后在"|"运算。
例一:将temp中的低8位和t中的高4位组合成一个12位数
unsigned short temp = 0x00AB;unsigned char t = 0xC0;temp = temp<<4;temp |= (t>>4);
例二:保留channel的底4位,将其作为result的高4位,result的低4位设置为0xC;
方法二:如果这2个数除了有效位之外,其他位需要保留为1,方法是先与适当的数"|",之后2个数"&"
例一:保留temp的高4位和line的底4位,并将其组合成result。由于line的其他位全位1,所以必须先将temp的其他位全部设置为1,之后2个数"&"即可。
unsigned char result;unsigned char temp = 0xAB;unsigned char line = 0xFE;temp |= 0x0F;result = temp&line;
应用五、将一个16位数的高低8位分别拆成2个8位数,方法是通过多字节数赋给少字节数,多字节数高位字节部分将被自动截取的原理。
unsigned short temp = 0xCDAB;unsigned char fir;unsigned char sec;fir = temp>>8;sec = temp;
应用六、如果CPU没有来算数移位操作,如何用逻辑移位操作实现。
例如:line = 0xFE,如何实现其的左移操作后,右边补入的是1而不是默认的0。
http://blog.sina.com.cn/s/blog_8795b0970101j5ij.html
- 寄存器某一位置位或者清零
- 嵌入式 寄存器某一位置位或清零
- 嵌入式 寄存器某一位置位或清零
- 【汇编ASM】寄存器指定位置清零
- 如何对某一位置0或者置1?
- 将某一位置为一,将某一位不置为一,判断某一位是否为一
- 定义一个宏,实现对数据a的第n位置位、清零、取反
- 位操作,置位,清零
- 设置整数的某一位为1或者为0
- double类型如何四舍五入到int或者小数点某一位
- 从寄存器中指定位置取指定位数值
- arm位清零bic指令
- ARM位清零指令bic
- 位操作赋值与清零
- 清零和设置bit位
- 用a标签实现跳转到本页面或者目标页面的顶部、底部或者某一位置
- AVR单片机的置位与清零
- bit位的设置和清零
- Codeforces Round #312 (Div. 2) E A Simple Task 线段树
- python抓取网页内容
- java.lang.UnsupportedClassVersionError: t : Unsupported major.minor version
- 该 App 的 Info.plist 不能包含阻碍在任何 iOS 设备上打开此 App 的 UIRequiredDeviceCapabilities 键值
- Android ORM数据库框架之-greenDao(三)
- 寄存器某一位置位或者清零
- C++ 虚函数表解析
- 【codevs1074】食物链
- 使用Drip协议、例子程序、不同ID烧录不同节点
- Warning: Attempt to present <UIImagePickerController: 0x292b400> on xxx which is already presenti
- 解析init.rc
- UITouch详解
- Linux常用命令
- 对于代码,越害怕写错就越写不敢写,然而带来的很明显是技术的滞留...