:C语言实现循环移位:
比如将a=0x45循环左移二位。a循环左移n位,即将原来右面(8-n)位左移n位,而将原来左端的n位移到最右面n位。
实现步骤:
1、将a的左端n位先放到b中的高n位中
b=>>(8-n);
2、将a左移n位,其右面高n位被补0
c=<
3、将b,c进行或运算
a=c|b;
程序如下:
main()
{
unsignedchara=0x45,b,c;
unsignedintn=2;
b=a>>8-n)
c=a<
a=c|b;
}
二:C言实现循环移位
在Keil中有这样一个库,其头文件为在C51\INC目录下,有以下几个操作,它不是函数,但象函数,它们有入口出口,但是,没有返回RET语句,如果有这些操作,用disassembly窗口可以看到是将代码直接嵌入到你的代码中,其效率很高,比如一个空操作,_nop_()嵌入的代码就是一个NOP指令。在这个库中,有如下操作:
unsignedchar_chkfloat_(floatval)检查状态
返回值:0:standardfloating-pointnumbers
1:Floating-pointvalue0
2:+INF(positiveoverflow)
3:-INF(Notanumber)errorstatus
unsignedchar_crol_(//字节的多次循环左移
unsignedcharc,//C左移的字符
unsignedcharb);//b左移的位数
unsignedchar_cror_(//字节的多次循环右移
unsignedcharc,//C右移的字符
unsignedcharb);//b右左移的位数
unsignedint_irol_(//字的循环左移
unsignedintc,//c左移的字
unsignedcharb);//b左移的次数
unsignedint_iror_(//字的循环右移
unsignedintc,//c右移的字
unsignedcharb);//b右移的次数
unsignedlong_lrol_(//4字节(双字)的循环左移
unsignedlongc