专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 单片机

数组循环移位解决办法

发布时间:2010-06-14 15:44:05 文章来源:www.iduyao.cn 采编人员:星星草
数组循环移位
01011001 10101001 10011001 01100001

0x59 0xA9 0x99 0x61

比如数组有上面四个元素、
住右移一位变成、

10101100 11010100 11001100 10110000

0xAC 0xD4 0xCC 0xB0

比如我想右移16位、17位怎么操作?、
说个大概的方法吧、
怎么写代码效率最优、
不考虑代码大小、速度要最优、

------解决方案--------------------
探讨

引用:

是4个byte吧?
直接强转成unsigned int类型
然后右移16位 (&)左移32位-16位

举例
unsigned char a[4]={0x59 ,0xA9 ,0x99, 0x61}
//考虑机器大小端
unsigned int b=*(unsigned int *)a;
int c=17;……

------解决方案--------------------
比如你有n个Byte,循环右移M位,那么你实际上可以认为是把最后M/8个字节拿到前面去,然后再右移M%n位(考虑到计算速度,M/8可以用M>>3,M%8可以用M-M>>3)

应该是先移位完再把M/8个字节往前挪


同意6楼的!
------解决方案--------------------
for(i = 1; i < count; i++)
{
data[i] = (data[i] << 1) | (data[i - 1] & 0x01);
}
data[0] = data[0] << 1;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: