找回密码
 注册
查看: 527|回复: 1
打印 上一主题 下一主题

单片机C语言实现循环移位!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-28 06:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机C语言实现循环移位!
  q& T+ v% J/ m2 F: T6 m' X3 e6 u2 z. u  D. Q6 Z. q

$ E& ^6 @6 b, r

大家知道,大家用mcu写程序的时候,只有移位的语句,没有循环移位的语句。那么如何实现循环移位呢,详见下述:


! T7 Y7 b1 N  e3 ^* R

循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。  

" k" @! i4 Z7 Y: d* u& H, w1 I

设有数据说明:

# m" ^  t/ e7 F: j6 v3 F

a=01111011,循环左移2位 正确结果: 11101101


% T5 a* f; _- D5 w

过程:

) v: c% s1 h, N! q+ Q. Z

b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;


$ H5 Z! M) V9 B0 w; P

a=a<<2;左移 a=11101100


6 q0 z2 C. o$ A! Z8 f( x

a=a|b; a=11101101


7 E* C' C! E( e3 y, A0 K

如果不是用中间变量 a=(a>>(8-2))|(a<<2)


% p4 n$ G4 V5 d- `

总长度N(8 16 32)


. M# Q0 {. W1 u1 D! A

循环左移n: (a>>(N-n))|(a>>n)

. I+ s6 ?0 O# [' o: V

循环右移n: (a<<(N-n))|(a>>n)

. l- s2 q8 m/ y; L0 Q5 ?

C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。

' k  [" S9 k% n  T1 s5 N, f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-26 12:08 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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