[分享]找了好久没找到高低位互换的例子,自己琢磨着编了一个

2020-01-22 12:15发布

想把1个字节8位高低位互换,即0-7,1-6,2-5,3-4分别互换。
这个在某些情况需要用到。
网上找了一些例子,发现有的不能使用,有的明显就是错的。
无奈自己编了一个,如下:

unsigned char LSBMSB(unsigned char dat)//字节高低位互换
{
  unsigned char i,temp=0;
  for(i=0;i<8;i++)
  {
    if(dat&(1<<(7-i)))
    {
      temp|=(1<<i);
    }
  }
  return temp;
}

推导过程:
if(dat&(1<<7)) temp|=(1<<0);
if(dat&(1<<6)) temp|=(1<<1);
if(dat&(1<<5)) temp|=(1<<2);
if(dat&(1<<4)) temp|=(1<<3);
if(dat&(1<<3)) temp|=(1<<4);
if(dat&(1<<2)) temp|=(1<<5);
if(dat&(1<<1)) temp|=(1<<6);
if(dat&(1<<0)) temp|=(1<<7);

测试了一下可以使用。依此可以很容易推导出16位,32位的互换函数。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
millwood0
1楼-- · 2020-01-22 14:32
 精彩回答 2  元偷偷看……
shizt
2楼-- · 2020-01-22 20:01
回复【1楼】millwood0
-----------------------------------------------------------------------

呵呵~
albert_w
3楼-- · 2020-01-22 20:36
论坛讨论过快速位交换,包括查表和蝶形交换等办法
amazing030
4楼-- · 2020-01-23 01:47
蝶形算法,很简洁
osoon2008
5楼-- · 2020-01-23 02:15
mov r1,#7
  clr r2
  mov a,dat
loop:
  rrc a
  jnc cary
  push a
  mov a,r2
  rl a
  inc a
  mov r2,a
  pop a
  jmp check
cary:
  push a
  mov a,r2
  rl a
  mov r2,a
  pop a
check:
  djnz r1,loop
laujc
6楼-- · 2020-01-23 05:10
 精彩回答 2  元偷偷看……

一周热门 更多>