左移/右移:都是指 二进制 移位

一、需要先将 目标数值,转换为“二进制”后,再进行移位操作!移位之后,再转换回之前的的进制数!

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
}


说明:在置或清变量或寄存器的某一位时,一定要注意不要影响其他位。所以用加减法是很难实现
的。

你可能感兴趣的:(c/c++,c语言)