ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
12
返回列表 发新帖

[应用相关] 怎么样进行移位

[复制链接]
楼主: feiqi1
| 2018-5-14 16:30 | 显示全部楼层
可以移0到31位了,t = t<<31;
| 2018-5-14 16:30 | 显示全部楼层
用汇编编程很容易的就进行多字节的移位
| 2018-5-14 16:30 | 显示全部楼层
移位33次和移位1次得到的结果相同
| 2018-5-14 16:30 | 显示全部楼层
高位移出舍弃,低位的移入补零;
| 2018-5-14 16:30 | 显示全部楼层
连续空间都看成连续的内存字节,则只需要一个字节
| 2018-5-14 21:23 | 显示全部楼层
汇编的时候有RRL,RRC就搞定了,C怎么弄啊?
| 2018-5-14 21:26 | 显示全部楼层
后10个字节的最高位分别移进其前一字节的最低位?
| 2018-5-14 21:28 | 显示全部楼层
比如有这些字节要参与移位: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;
| 2018-5-14 21:31 | 显示全部楼层
其实也不麻烦
比如要执行 RL (左移一位)
可以先取最低字节, RLC (把移出的高位保存在 C ) 然后依次高字节都读入
| 2018-5-14 21:33 | 显示全部楼层
执行 RLC 指令 后写回. 所有字节都执行完, 也就完成了一次左移操作.
| 2018-5-14 21:35 | 显示全部楼层
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();
}
}
| 2018-5-14 21:36 | 显示全部楼层
如果字节数是2,3,4时可以将数据类型定义为int或是long,
| 2018-5-14 21:38 | 显示全部楼层
我能想到的办法就是“用指针跳转”了,实在不行就“C+汇编”混编吧。
| 2018-5-15 10:56 | 显示全部楼层
写个移位函数就可以了  移位长度传参数限定
| 2018-5-16 09:45 | 显示全部楼层
如果不考虑效率,就一个字节一个字节地慢慢移,有多少个字节的数据都能完成
如果考虑效率,那就各出奇招了,
汇编,还有其他的----比如FPGA 都有用的,看你的需求
| 2018-5-16 09:49 | 显示全部楼层
位(Bit)可以移位,字节(Byte)如何移位??
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表