不懂从哪下手

[复制链接]
1759|18
 楼主| zhanglli 发表于 2022-3-2 23:53 | 显示全部楼层 |阅读模式
     就是比如一次性移位11个字节,比如左移,将最高字节的最高位移出丢失,并将下一字节的最高位移进前一字节的最低位,如此进行将后10个字节的最高位分别移进其前一字节的最低位,最后一个字节的最低位补0(或补1)。右移反过来。
heweibig 发表于 2022-3-2 23:56 | 显示全部楼层
然后呢?你是怎么应对这个的呢
 楼主| zhanglli 发表于 2022-3-2 23:59 | 显示全部楼层
汇编的时候有RRL,RRC就搞定了,C怎么弄啊?
stly 发表于 2022-3-3 21:05 | 显示全部楼层
后10个字节的最高位分别移进其前一字节的最低位?我怎么没明白
supernan 发表于 2022-3-3 21:08 | 显示全部楼层

比如有这些字节要参与移位:unsigned char  a[]={0xfe,0x25,0x32,0x56,0x4e,0x56,0xab,0xef,0xf3}:

    a[i]=a[i]<<1|((a[i+1]&0x80)? 1:0);      //    i 由0到7 。

    a[8]=a[8]<<1;
huangchui 发表于 2022-3-3 21:11 | 显示全部楼层
   这样子就可以同时将9个字节顺次向前移一位,如果要连续移多位,再加个循环控制就行了。
wyjie 发表于 2022-3-3 21:13 | 显示全部楼层
void delay()
{
uint16_t i;
for(i=0; i<20000; i++);
}


void led_8()
{
uint8_t i;
uint8_t tmp = 0x01;
for(i=0; i<8; i++)
{
    PORT =  ~(tmp<<i);//左移
    delay();
}
tmp = 0x80;
for(i=0; i<8; i++)
{
    PORT =  ~(tmp>>i);//右移
    delay();
}
}

void main()
{
while(1)
{
    led_8();
}
}
zwll 发表于 2022-3-3 21:15 | 显示全部楼层

如果字节数是2,3,4时可以将数据类型定义为int或是long,
unsigned int dat;
dat<<11;
pengf 发表于 2022-3-3 21:17 | 显示全部楼层
用C写这种程序效率很低。
dengdc 发表于 2022-3-3 21:20 | 显示全部楼层
在Keil内字节移位在位运算内
zhenykun 发表于 2022-3-3 21:22 | 显示全部楼层
wyjie 发表于 2022-3-3 21:22 | 显示全部楼层
或者在电机供电插排上加几个磁环。
xxrs 发表于 2022-3-3 21:24 | 显示全部楼层
唉,还是没有什么结果,算了,多谢大家啦
tpgf 发表于 2022-4-2 14:30 | 显示全部楼层
自己写个小算法吧
paotangsan 发表于 2022-4-2 14:37 | 显示全部楼层
进行左移和右移就行啊
renzheshengui 发表于 2022-4-2 14:46 | 显示全部楼层
这种代码有很多啊
wakayi 发表于 2022-4-2 14:54 | 显示全部楼层
可以先简单的了解一下移位运算符
wowu 发表于 2022-4-2 15:00 | 显示全部楼层
C的效率挺高的啊
xiaoqizi 发表于 2022-4-2 15:12 | 显示全部楼层
感觉没有所谓效率很低下的说法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1016

主题

9386

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0