一个if条件语句 的表达式计算问题

2020-02-04 09:05发布

本帖最后由 hkeg8y 于 2012-4-22 21:33 编辑

a[]={0,1,2,3}
为什么if(-1<a[0])的条件为假
而if(-1<0)却为真。
不明白-1<a[0]表达式是怎么计算的



求指点~!!谢谢

仿真.rar (52.32 KB, 下载次数: 1) 2012-4-22 21:27 上传 点击文件名下载附件
程序和仿真
  程序和仿真图

我是想设置一个加减计数器,步长、初始值和终止值可设置。
现在程序就是在设置初始值为0的时候。无法从0循环到终止值



#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P1^0;           //轻触开关
sbit s2=P1^1;
sbit s3=P1^2;
sbit s4=P1^3;
uint a[]={0,100,200,300,400,500,600,700,800,900,999};   
uint b=0;     //显示数值
uint d=0;
uint n=0;
uint k=0;
uint c=0;  
uint m=0;      
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,           //共阳数码管数值0-9
0x80,0x90

/*0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,           //共阴数码管数值0-9
0x7f,0x6f*/
};
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}


void xianshi()         //计数时数码管显示
{

        P3=0x08;                           //共阴为0 共阳为1
        P2=table[m%10];
        delay(8);
        P3=0x04;       
        P2=table[m%100/10];
        delay(8);
        P3=0x02;       
        P2=table[m%1000/100];
        delay(8);
        P3=0x01;       
        P2=table[n];
        delay(8);
               
}



void xianshi1()         //初始值设置数码管显示
{

        P3=0x08;                           //共阴为0 共阳为1
        P2=table[a[c]%10];
        delay(8);
        P3=0x04;       
        P2=table[a[c]%100/10];
        delay(8);
        P3=0x02;       
        P2=table[a[c]%1000/100];
        delay(8);
        P3=0x01;       
        P2=table[n];
        delay(8);
               
}


void xianshi2()         //步长设置时数码管显示
{

        P3=0x01;       
        P2=table[n];
        delay(8);
               
}

void xianshi3()         //终止值设置时数码管显示
{

        P3=0x08;                           //共阴为0 共阳为1
        P2=table[a[d]%10];
        delay(8);
        P3=0x04;       
        P2=table[a[d]%100/10];
        delay(8);
        P3=0x02;       
        P2=table[a[d]%1000/100];
        delay(8);
        P3=0x01;       
        P2=table[n];
        delay(8);
               
}



//计数
void key0()
{                        xianshi();       
        if(s1==0)
        {
                delay(5);
                if(s1==0)
                {        m=m+n;
                        if(m>a[c])
                        m=m-a[c]+a[d];                                       
                        while(!s1);    //等待松开
                }         
         }
        if(s2==0)
        {
                delay(5);
                if(s2==0)
                {
                        m=m-n;
                        if(m<a[d])
                         m=a[c]-a[d]+m;                       
                    while(!s2);    //等待松开               
                 }         
         }
}




//步长设置
void key1()
{                        xianshi2();       
        if(s1==0)
        {
                delay(5);
                if(s1==0)
                {        n++;
                        if(n==10)
                        n=0;                                       
                        while(!s1);    //等待松开
                }         
         }
        if(s2==0)
        {
                delay(5);
                if(s2==0)
                {
                        n--;
                        if(n==-1)
                        n=9;                                       
                    while(!s2);    //等待松开               
                 }         
         }
}



//计数器初始值
void key2()
{                        xianshi3();       
        if(s1==0)
        {
                delay(5);
                if(s1==0)
                {
                        d++;
                        if(d==11)
                        d=0;
                        m=a[d];                                       
                        while(!s1);    //等待松开

                }         
         }
        if(s2==0)
        {
                delay(5);
                if(s2==0)
                {

                        d--;
                        if(d==-1)
                        d=10;
                    m=a[d];                                       
                        while(!s2);    //等待松开               
                 }         
         }

}


//计数器结束值
void key3()
{                        xianshi1();         
        if(s1==0)
        {
                delay(5);
                if(s1==0)
                {
                        c++;
                        if(c==11)
                        c=0;                                       
                        while(!s1);    //等待松开
                       
                }         
         }
        if(s2==0)
        {         
                delay(5);
                if(s2==0)
                {

                        c--;
                        if(c==-1)
                        c=10;                                       
                        while(!s2);    //等待松开       
                       
                 }         
         }

}


void main()
{       
        while(1)
        {                  

            if(s3==0)
            {
                   delay(5);
                   if(s3==0)
                   {
             k++;
                         if(k==4)k=0;
                         while(!s3);
                    }         
             }       

                if(s4==0)
            {
                   delay(5);
                   if(s4==0)
                   {
            m=0;
                        d=0;
                        n=0;
                        c=0         ;
                        k=0;
                        while(!s4) ;
                    }         
             }       
                        
                 switch(k)
                 {
                  case 0:key0();break;
                  case 1:key1();break;
                  case 2:key2();break;
                  case 3:key3();break;
                 }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
guozaizb
1楼-- · 2020-02-05 11:40
dragon_hn 发表于 2012-4-23 09:02
VC6.0下运行的结果之二.注意unsigned int与unsigned char的区别.

有啥区别呢?看结果看不懂!
qinxg
2楼-- · 2020-02-05 15:27
 精彩回答 2  元偷偷看……
hkeg8y
3楼-- · 2020-02-05 17:32
谢谢各位了。。。学到不少东西
zjk
4楼-- · 2020-02-05 21:39
guozaizb 发表于 2012-4-23 10:32
有啥区别呢?看结果看不懂!

这个是规定性的东西,不是看不看得懂的问题,就像是我规定无符号数跟有符号数不能比较,必须统一成一种类型的数
y574924080
5楼-- · 2020-02-06 00:51
guozaizb 发表于 2012-4-23 10:32
有啥区别呢?看结果看不懂!

在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别

类型级别从高到低的顺序是long double ,double, float,unsigned long long, long long,unsigned long,long,unsigned int,,int。

-------------------------(摘自C Primer Plus      【页数:105】)

还有一些我懒得手打了

搜索一下就可以找到这本书了

里面讲解的很明白了

guozaizb
6楼-- · 2020-02-06 04:00
y574924080 发表于 2012-4-23 13:54
在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别

类型级别从高到低的顺序是long ...

明白了,看来论坛牛人很多呀!!

一周热门 更多>