打印
[STM32F1]

怎么样进行移位

[复制链接]
楼主: gongche
手机看帖
扫描二维码
随时随地手机跟帖
21
dingy| | 2021-11-13 21:13 | 只看该作者 回帖奖励 |倒序浏览
可以移0到31位了,t = t<<31;

使用特权

评论回复
22
houcs| | 2021-11-13 21:15 | 只看该作者
用汇编编程很容易的就进行多字节的移位

使用特权

评论回复
23
juventus9554| | 2021-11-13 21:18 | 只看该作者
移位33次和移位1次得到的结果相同

使用特权

评论回复
24
houcs| | 2021-11-13 21:22 | 只看该作者
高位移出舍弃,低位的移入补零;

使用特权

评论回复
25
juventus9554| | 2021-11-13 21:25 | 只看该作者
连续空间都看成连续的内存字节,则只需要一个字节

使用特权

评论回复
26
zwll| | 2021-11-13 21:29 | 只看该作者
汇编的时候有RRL,RRC就搞定了,C怎么弄啊?

使用特权

评论回复
27
dingy| | 2021-11-13 21:33 | 只看该作者
如果不是多个字节进行移位,就有直接的移位指令

使用特权

评论回复
28
juventus9554| | 2021-11-13 21:38 | 只看该作者
后10个字节的最高位分别移进其前一字节的最低位?

使用特权

评论回复
29
stly| | 2021-11-13 21:40 | 只看该作者

比如有这些字节要参与移位: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;

使用特权

评论回复
30
llljh| | 2021-11-13 21:42 | 只看该作者

其实也不麻烦
比如要执行 RL (左移一位)
可以先取最低字节, RLC (把移出的高位保存在 C ) 然后依次高字节都读入

使用特权

评论回复
31
pengf| | 2021-11-13 21:44 | 只看该作者
执行 RLC 指令 后写回. 所有字节都执行完, 也就完成了一次左移操作.

使用特权

评论回复
32
supernan| | 2021-11-13 21:47 | 只看该作者

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();
}
}

使用特权

评论回复
33
xxrs| | 2021-11-13 21:49 | 只看该作者
如果字节数是2,3,4时可以将数据类型定义为int或是long,

使用特权

评论回复
34
juventus9554| | 2021-11-13 21:51 | 只看该作者
我能想到的办法就是“用指针跳转”了,实在不行就“C+汇编”混编吧。

使用特权

评论回复
35
juventus9554| | 2021-11-13 21:53 | 只看该作者
写个移位函数就可以了  移位长度传参数限定

使用特权

评论回复
36
stly| | 2021-11-13 21:56 | 只看该作者

如果不考虑效率,就一个字节一个字节地慢慢移,有多少个字节的数据都能完成
如果考虑效率,那就各出奇招了,
汇编,还有其他的----比如FPGA 都有用的,看你的需求

使用特权

评论回复
37
llljh| | 2021-11-13 21:58 | 只看该作者
位(Bit)可以移位,字节(Byte)如何移位??

使用特权

评论回复
38
lizye| | 2021-11-13 22:03 | 只看该作者
逻辑运算啊

使用特权

评论回复
39
jiahy| | 2021-11-13 22:06 | 只看该作者
逻辑左移或者逻辑右移

使用特权

评论回复
40
jiaxw| | 2021-11-13 22:08 | 只看该作者
需要移动多少位啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则