想把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位的互换函数。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
呵呵~
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
一周热门 更多>