Chinaunix首页 | 论坛 | 博客
  • 博客访问: 918012
  • 博文数量: 84
  • 博客积分: 4334
  • 博客等级: 上校
  • 技术积分: 1610
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-27 07:49
文章分类

全部博文(84)

文章存档

2012年(5)

2011年(21)

2010年(58)

分类: C/C++

2010-10-12 10:10:43

0与:0 & x = 0;
0或:0 | x =x;
 
首先引出两个问题:一个八位寄存器rRegister,如何判断它的第3位是否为0?如何对它的第4位写入数据1?
 
一.判断第3位,即屏蔽其它位:将其它位清空为0即可,第3位保留为1:rRegister & 0x04.也即是说判断(rRegister & 0x04)的值是否为0即可.
 

if (!(rRegister & 0x04)) //如果rRegister的第3位为0


二.对第4位写入数据,要求对其它位不改变:将其它位与0进行或运算即可,0|x=x;即:rRegister | 0x10.也即是说令(rRegister | 0x10) = 0或者1即可。
 

#define ABC (rRegister|0x10)

ABC = 0;


三.OK,解决一个问题吧。rREG是一个16位寄存器,现在要求读取它的低4位值,并判断第2位是否为0?如何解决?
1.低4位------前12位全部屏蔽:rREG & 0x000F,这个值即是读取的低4位的值。
2.第2位------第1,3,4位不改变:(rReg & 0x000F) | 0x0002;  (2----0010)
 

if(!(rReg & 0x000F) | 0x0002) //如果rReg的第2位为0


阅读(4375) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~