首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

数组循环移位解决办法

2012-03-24 
数组循环移位01011001 10101001 10011001 011000010x590xA90x990x61比如数组有上面四个元素、住右移一位变

数组循环移位
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;

热点排行