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);


}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
jsjjccc
1楼-- · 2020-02-05 04:25
回复【2楼】dr2001
-----------------------------------------------------------------------

讲的很详细啊....谢了...上次貌似问过一次了也是类型的问题....这次又忘了,汗
不过我没一本C语言的书....查也没的查...
jsjjccc
2楼-- · 2020-02-05 08:09
 精彩回答 2  元偷偷看……
falcon8663
3楼-- · 2020-02-05 12:44
涨知识了
sharpufo
4楼-- · 2020-02-05 16:56
另外,如果编译器开启了优化
if (0!=(~0xFF)) //左边是0 右边也是0 应该是相等的 条件不成立不执行i++的
{
i++;//但还是执行这了
}

会被直接优化成

i++;
xivisi
5楼-- · 2020-02-05 20:26
51 处理器 怎么会默认是整形?
xivisi
6楼-- · 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)

一周热门 更多>