一、需要先将 目标数值,转换为“二进制”后,再进行移位操作!移位之后,再转换回之前的的进制数!
0x01<<1 => 0000 0001 <<1=>0000 0010 =>0x02
二、bit位应用场景之--IO卡(输入/输出高电平)
for(int i = 0; i < 16; i++)//16路IO卡
{
UINT nMask = (0x00000001 << i);
//上次的第i位 和 当前次的第i位 比较
if((nMask & nLastBit) != (nMask & nCurrentBit)) //发生变化
{
//设置“事件”使能状态,从而控制相应线程的同步
}
}
三、编码实现某一变量某位清 0 或置 1
给定一个整型变量 a,写两段代码,第一个设置 a 的 bit 3,第二个清 a 的 bit 3,在以上两个操作中,要保持其他位不变。
【答案】
#define BIT3 (0x1 << 3 )
Satic int a;
//设置 a 的 bit 3:
void set_bit3( void )
{
a |= BIT3; //将 a 第 3 位置1
}
//清a 的 bit 3
void set_bit3( void )
{
a &= ~BIT3; //将 a 第 3 位清0
}
说明:在置或清变量或寄存器的某一位时,一定要注意不要影响其他位。所以用加减法是很难实现
的。