嵌入式或者开关量的操作过程中经常用到位移运算:
例1:获取16位int 的每一位,并将每一位重新组成原值。
uint16_t iValue = 0XFF6F;
uint16_t iValue_[16] ;
uint16_t iValue_s = 0;
//打印16位数的每一位;
for(int i=0;i<16;i++)
{
iValue_[i] = iValue>>i & 0x1;
printf("%d:%u\n",i,iValue_[i]);
}
//将0,1值转换成一个16位数据
for(int i=0;i<16;i++)
{
iValue_s = iValue_[i]<<i|iValue_s;
}
printf("%x\n",iValue_s);
总结:
1、通过与运算来取每一位,不需要的位通过与0进行与运算被消掉;
2、通过或运算来置每一位,0与其他位进行或运算,不会影响到原先位的数据。