打印

不懂从哪下手:

[复制链接]
431|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanglli|  楼主 | 2017-4-21 23:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

     就是比如一次性移位11个字节,比如左移,将最高字节的最高位移出丢失,并将下一字节的最高位移进前一字节的最低位,如此进行将后10个字节的最高位分别移进其前一字节的最低位,最后一个字节的最低位补0(或补1)。右移反过来。
沙发
lium| | 2017-4-21 23:46 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

评论回复
板凳
zhanglli|  楼主 | 2017-4-21 23:47 | 只看该作者
汇编的时候有RRL,RRC就搞定了,C怎么弄啊?

使用特权

评论回复
地板
llia| | 2017-4-21 23:49 | 只看该作者

后10个字节的最高位分别移进其前一字节的最低位?我怎么没明白

使用特权

评论回复
5
zhuww| | 2017-4-21 23:51 | 只看该作者
比如有这些字节要参与移位: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;

使用特权

评论回复
6
lium| | 2017-4-21 23:53 | 只看该作者

   这样子就可以同时将9个字节顺次向前移一位,如果要连续移多位,再加个循环控制就行了。

使用特权

评论回复
7
llia| | 2017-4-21 23:54 | 只看该作者
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();
}
}

使用特权

评论回复
8
wangpe| | 2017-4-21 23:57 | 只看该作者
如果字节数是2,3,4时可以将数据类型定义为int或是long,
unsigned int dat;
dat<<11;

使用特权

评论回复
9
langgq| | 2017-4-21 23:59 | 只看该作者
用C写这种程序效率很低。

使用特权

评论回复
10
zhanglli|  楼主 | 2017-4-22 21:54 | 只看该作者
嗯,知道了

使用特权

评论回复
11
yufe| | 2017-4-22 21:55 | 只看该作者
在Keil内字节移位在位运算内

使用特权

评论回复
12
wangpe| | 2017-4-22 21:56 | 只看该作者
不懂。。

使用特权

评论回复
13
wangzsa| | 2017-4-22 21:58 | 只看该作者
c简单

使用特权

评论回复
14
zhanglli|  楼主 | 2017-4-22 22:03 | 只看该作者
唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
15
kk5004| | 2017-5-4 10:40 | 只看该作者
你好,我這邊是 希特電子(深圳)有限公司, 是中國大陸笙泉MCU的代理商  有需要的可以 加我 QQ 328626444 詳細聊聊,   潘,R

使用特权

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

本版积分规则

1016

主题

9386

帖子

1

粉丝