我正在使用 dsPIC33F 和 GCC。我想将一个字中的位向左或向右旋转一次,如下所示:
MSB LSB
input: 0101 1101 0101 1101
right: 1010 1110 1010 1110
left : 1011 1010 1011 1010
(如果不清楚,LSB 移动到 MSB 的位置以进行右旋转,反之亦然。)
我的处理器已经有一个向右旋转(rrnc,rrc)和向左旋转指令(rlnc,rlc),所以我希望编译器能够优化它。如果没有,我可能必须使用内联汇编。
您可以将它们写为常规班次的明显组合:
x rol N == x << N | x >> width-N
x ror N == x >> N | x << width-N
where width
是您旋转的数字中的位数。
智能编译器可能(我认为会)检测到这种组合并编译为旋转指令。
请注意,它适用于无符号,并且宽度等于您正在处理的机器字中的位数(dsPIC 上的无符号 int 为 16)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)