C51中的 intrins.h中的循环移位函数和标准C中的移位符号"<<"和">>"疑惑,望牛人解答!

jimmydiy   2010-3-25 19:27 楼主
_crol_, _cror_,等等函数我知道,是循环移位的意思,这些函数的功能和标准C的移位操作符"<<"和">>"有什么区别呢!
他们在执行效率上有不同!

回复评论 (9)

在执行效率上有何不同?
点赞  2010-3-25 19:27
标准C的移位操作符"<<"左移一次,超过8位的就被舍去了,最低位补0
">>"右移一次,超过8位的就被舍去了,最高位补0
_crol_, _cror_,是循环移位
执行效率肯定是标准C的移位效率高,因为不用管移出的超过8位的位
点赞  2010-3-25 21:24

4楼 wtf 

引用: 引用 2 楼 qzf368 的回复:
标准C的移位操作符"<<"左移一次,超过8位的就被舍去了,最低位补0
">>"右移一次,超过8位的就被舍去了,最高位补0
_crol_, _cror_,是循环移位
执行效率肯定是标准C的移位效率高,因为不用管移出的超过8位的位


upupupup
点赞  2010-3-25 22:10
同意楼上
点赞  2010-3-25 22:33
ACC >>= 1;和
ACC = ACC >> 1;
是一样的吗,我怎么看有的文件上面这样用ACC = ACC >> 1是循环移位!
点赞  2010-3-26 12:52
循环,就是带进位移位,C中的>>和<<是不带进位的。
ACC >>= 1;和
ACC = ACC >> 1;
是一样的
ACC >>= 1;//是C风格而
ACC = ACC >> 1;//是basic风格。
点赞  2010-3-26 12:59
引用: 引用 6 楼 schlafenhamster 的回复:

循环,就是带进位移位,C中的>>和<<是不带进位的。
ACC >>= 1;和
ACC = ACC >> 1;
是一样的
ACC >>= 1;//是C风格而
ACC = ACC >> 1;//是basic风格。

不是这样的吧,51里面不带进位的循环移位也有相应指令啊,并不是只有带进位的移位的才叫循环移位!
比如
RR A
RL A
这个就是不带进位的循环移位
点赞  2010-3-26 20:39
C里面没有循环位移

点赞  2010-3-26 22:30
;原来就没有“循环”的说法
RR A;原名:Rotate Right
RL A;      Rotate Left

RCR A;原名 Rotate Right through Carry
RCL A
点赞  2010-3-27 10:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复