淘先锋技术网

首页 1 2 3 4 5 6 7

: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