“0与”运算 and “0或”运算
时间:2010-10-12 来源:FreedomXura
0与:0 & x = 0;
0或:0 | x =x;
首先引出两个问题:一个八位寄存器rRegister,如何判断它的第3位是否为0?如何对它的第4位写入数据1?
一.判断第3位,即屏蔽其它位:将其它位清空为0即可,第3位保留为1:rRegister & 0x04.也即是说判断(rRegister & 0x04)的值是否为0即可.
二.对第4位写入数据,要求对其它位不改变:将其它位与0进行或运算即可,0|x=x;即:rRegister | 0x10.也即是说令(rRegister | 0x10) = 0或者1即可。
三.OK,解决一个问题吧。rREG是一个16位寄存器,现在要求读取它的低4位值,并判断第2位是否为0?如何解决? 1.低4位------前12位全部屏蔽:rREG & 0x000F,这个值即是读取的低4位的值。 2.第2位------第1,3,4位不改变:(rReg & 0x000F) | 0x0002; (2----0010)
if (!(rRegister & 0x04)) //如果rRegister的第3位为0 |
二.对第4位写入数据,要求对其它位不改变:将其它位与0进行或运算即可,0|x=x;即:rRegister | 0x10.也即是说令(rRegister | 0x10) = 0或者1即可。
#define ABC (rRegister|0x10) |
三.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 |
相关阅读 更多 +