找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5860|回复: 1
收起左侧

[求助]为什么这个函数返回来的永远是0x00

[复制链接]
ID:17922 发表于 2009-11-5 16:17 | 显示全部楼层 |阅读模式

int    yunsuan2(unsigned int i)          //低位补1函数
{
    unsigned int j=0x00;
    for(;i>1;i--)
      {

        j=j>>1+0x80;〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗


      }
    return i=j;
}
/******************************************************/
int       yunsuan1(unsigned int i)            //高位补1函数
{
     unsigned int j=0x00;
     for(;i>1;i--)
     {
       j=j<<1+0x01;〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗

      }
     return i=j;

}

 

 

void main(void)
{
      unsigned int j=0;
      unsigned int i;
      while(1)
      {

 

       P0=0xff;

       for(j=1;j<=4;j++)
           {
              i=j;
              P0=(P0<<(j)+yunsuan1(i));//P0左移j个位,低位补1〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗
              Delay(500);
              P0=(P0>>(j)+yunsuan2(i));//p0右移j个位,高位补1〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗

              Delay(500);
            }
       }

 

 }

程序的目的是要依次得到(0代表亮灯)

1111 1110

0111 1111

1111 1101

1011 1111

1111 1011

1101 1111

1111 0111

1110 1111

但下载到单片机里后出现灯亮的顺序是这样的

1111 1110

0111 1111

1111 1100

0011 1111

1111 1000

0001 1111

1111 0000

0000 1111

为什么会这样!!??

原来是运算符的优先级搞错了。

给一起学习的同学做个反面榜样吧。

[此贴子已经被作者于2009-11-5 18:44:52编辑过]
回复

使用道具 举报

ID:18333 发表于 2009-11-6 11:17 | 显示全部楼层

加个()就可以解决问题了。

如:j=(j>>1)+0x80

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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