学贵有恒

方有所成

导航

二进制位的倒序

8位的倒序
uint8 bin8_rev(uint8 data) 

      data=((data&0xf0)>>4) | ((data&0x0f)<<4); 
      data=((data&0xCC)>>2) | ((data&0x33)<<2); 
      data=((data&0xAA)>>1) | ((data&0x55)<<1); 
      return data; 
}
 
16位的倒序:
static INT16U BitChange(INT16U us_DataIn)
{
  INT16U us_Data = us_DataIn;
  us_Data = ((us_Data & 0xFF00) >> 8) | ((us_Data & 0x00FF) << 8);
  us_Data = ((us_Data & 0xF0F0) >> 4) | ((us_Data & 0x0F0F) << 4);
  us_Data = ((us_Data & 0xCCCC) >> 2) | ((us_Data & 0x3333) << 2);
  us_Data = ((us_Data & 0xAAAA) >> 1) | ((us_Data & 0x5555) << 1);
 
  return (us_Data);
}

32位的倒序:

unsigned int GetRevertBit(unsigned int v)
{
  v = ((v <<16) & 0xFFFF0000) | ((v >>16) & 0x0000FFFF);
  v = ((v << 8) & 0xFF00FF00) | ((v >> 8) & 0x00FF00FF);
  v = ((v << 4) & 0xF0F0F0F0) | ((v >> 4) & 0x0F0F0F0F);
  v = ((v << 2) & 0xCCCCCCCC) | ((v >> 2) & 0x33333333);
  v = ((v << 1) & 0xAAAAAAAA) | ((v >> 1) & 0x55555555);

  return v;
}

posted on 2018-06-21 13:56  CarryBricks  阅读(706)  评论(0编辑  收藏  举报