if (0!=(~0xFF)) 条件应该不成立的怎么还会执行的

2020-02-04 09:18发布

#include<REGX52.H>

unsigned char i,j,k;

void main(void)
{

        j=0;
        k=~0xFF;

        if (0!=(~0xFF)) //左边是0 右边也是0 应该是相等的 条件不成立不执行i++的
        {
                i++;//但还是执行这了
        }

        if (j!=k) //都是0,条件不成立
        {
                i++; //这次就不执行的
        }

        while (1);


}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
28条回答
xivisi
2020-02-05 22:37
翻出 keil 来编译了一下
int main()
{
        unsigned char k,f,g,h;
        k=~0XFF;
        f=0X00;
        g=0;
        h=0;

        if(0!=k)
        {
        k++;
        }
        if(0!=f)
        {
        f++;
        }
        if(0!=g)
        {
        g++;
        }

        if(0!=~0XFF)
        {
        h++;
        }
}

以上代码 统统符合逻辑

编译后的代码  自行参阅

C:0x0000    020010   LJMP     C:0010
     3: int main()
     4: {
     5:         unsigned char k,f,g,h;
     6:         k=~0XFF;
C:0x0003    E4       CLR      A
C:0x0004    FF       MOV      R7,A
     7:         f=0X00;
C:0x0005    FE       MOV      R6,A
     8:         g=0;
C:0x0006    FD       MOV      R5,A
     9:         h=0;
    10:  
    11:         if(0!=k)
C:0x0007    6001     JZ       C:000A
    12:         {
    13:         k++;
C:0x0009    0F       INC      R7
    14:         }
    15:         if(0!=f)
C:0x000A    EE       MOV      A,R6
C:0x000B    6001     JZ       C:000E
    16:         {
    17:         f++;
C:0x000D    0E       INC      R6
    18:         }
    19:         if(0!=g)
C:0x000E    ED       MOV      A,R5
    20:         {
C:0x000F    22       RET      
C:0x0010    787F     MOV      R0,#0x7F
C:0x0012    E4       CLR      A
C:0x0013    F6       MOV      @R0,A
C:0x0014    D8FD     DJNZ     R0,C:0013
C:0x0016    758107   MOV      0x81,#0x07
C:0x0019    020003   LJMP     main(C:0003)

一周热门 更多>