好好看下,这段程序,你们觉得有没有不对的地方

[复制链接]
1709|14
 楼主| 小营七郎 发表于 2013-6-12 23:20 | 显示全部楼层 |阅读模式
DMA, rc, IDMA, DM, AI

uchar cnt=0;
   void main()
   {

  。。。。。
   P5OUT&=~(1<<cnt);
   cnt++;
   if(cnt==6) cnt=0;
     。。。。。
   }


cnt开始=0,~(1<<cnt)=0x1111 1111 1111 1111 1110
cnt=0x01,    ~(1<<cnt)=0b1111  1111  1111  1101
cnt=0x02,    ~(1<<cnt)=0b1111  1111  1111  1011
cnt=0x03,    ~(1<<cnt)=0b1111  1111    1111       0111
cnt=0x04,    ~(1<<cnt)=0b1111  1111     1110          1111

cnt=0x05    ~(1<<cnt)=0b111 1         111 1            1101                 1111为什么会是这样?


cnt=0x0000 0110          (1<<cnt)=0000  1100            ~(1<<cnt)=1111 0011  为什么不是这样的?


airwill 发表于 2013-6-13 12:16 | 显示全部楼层
cnt=0x0000 0110          (1<<cnt)=0100  0000

cnt=0x0000 0110          (cnt<<1)=0000  1100

这不应该有疑问嘛.
hwk612167 发表于 2013-6-13 12:52 | 显示全部楼层
对结果没有影响
 楼主| 小营七郎 发表于 2013-6-13 14:54 | 显示全部楼层
airwill 发表于 2013-6-13 12:16
cnt=0x0000 0110          (1

我懂了,符号左边是要移位的对象,右边是要移几位。
:lol
lzbf 发表于 2013-6-13 18:48 | 显示全部楼层
你要做简单移位 至于这么麻烦的。
 楼主| 小营七郎 发表于 2013-6-14 11:54 | 显示全部楼层
lzbf 发表于 2013-6-13 18:48
你要做简单移位 至于这么麻烦的。

那你怎么移的?
hawksabre 发表于 2013-6-14 19:18 | 显示全部楼层
感觉程序写的不是很规范   应该有隐藏的bug
diweo 发表于 2013-6-15 16:54 | 显示全部楼层
本帖最后由 diweo 于 2013-6-15 16:58 编辑

大体上,左移一位就是乘以2,右移一位就是除以2。
最常见的是用1来移位,当然换别的数也一样的道理,只要注意一下溢出就行了。
firstblood 发表于 2013-6-17 22:30 | 显示全部楼层
这个程序的也没什么问题的,编译的时候是可以通过的
vivilzb1985 发表于 2013-6-19 22:06 | 显示全部楼层
感觉这还是蛮复杂的,特别是你这移位操作的使用的
vivilzb1985 发表于 2013-6-19 22:06 | 显示全部楼层
不过看看楼上各位的解析的,我整明白了一些的
u880 发表于 2013-6-23 23:37 | 显示全部楼层
米发现什么啊
huigoushang 发表于 2013-6-23 23:57 | 显示全部楼层
进来学习的
G21372 发表于 2013-6-24 00:22 | 显示全部楼层
原来是这样的
yangguangaisha 发表于 2013-6-24 00:43 | 显示全部楼层
对结果应该没有影响吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

94

主题

1813

帖子

3

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