c语言移位 c51实现移位的语句有哪些?
c语言移位运算?
1 1ltlt5表示左移5位,结果为100,000。因为C语言从0开始计数,后五位为0。相应的8位寄存器是xx100000。(~ (1 ~(1ltlt5)),意思是左移五位再反相,结果是01111。相应的8位寄存器是xx011111。向右移动也是同样的道理。
c51实现移位的语句有哪些?
:c语言实现循环移位:
例如,a=0x45循环左移两位。a循环左移N位,即原右(8-n)位左移N位,原左N位右移N位。
实施步骤:
1.先把a的左n位放到b的高n位。
b=gtgt(8-n)
2.将A左移N位,右边高N位补0。
c=lt
3.或者B和c。
a=c|b
该过程如下:
主()
{
无符号字符a=0x45,b,c
无符号整数n=2
b=agtgt8-n)
c=备选
a=c|b
}
二:C语言实现循环移位
Keil中有这样一个库,它的头文件在C51INC目录下,它有如下操作。它不是函数,但是和函数一样,它们有入口和出口,但是没有RET语句返回。如果有这些操作,可以用反汇编窗口看到代码直接嵌入到你的代码中,效率很高。比如一个空操作,嵌入_NOP_()的代码就是一个。在该库中,有以下操作:
Unschedchar _ chkfloat _ (floatval)检查状态
返回值:0:标准浮点数
1:浮点值0
2: INF(正溢出)
3:-INF(非数字)错误状态
Unschedchar _ crol _ (//byte在多个循环中左移。
无符号字符C,//C字符向左移动
Unsigned char b)//b左移的位数
unsched char _ cror _(//字节在多个周期内右移。
无符号字符C,//C字符右移
Unsigned char b)//b左右移位的位数。
单词unsigned int _ iron _ (//)循环左移
无符号int c,//c字向左移位
无符号字符b)//b向左移动的次数
无符号int _iror_ (//word循环向右移动。
无符号int c,//c字右移
无符号字符b)//b向右移动的次数
无符号long _lrol_ (//4字节(双字)循环左移
无符号长c
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。