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条回答
CC2530
2020-02-07 11:47
回复【23楼】jsjjccc

#include<regx52.h>
unsigned int r; //r是整型
unsigned char i,j,k;

void main(void)
{
j=0;
k=0xff; //k=ff
if (j!=~0xff) //右边被整型成ff00
{
i++; //所以执行,
}//~0xff 证明提升的
if (k!=~0) //那现在右边应该是ffff 左边k为ff
{
i++;//(没执行)也不等那应该要执行的,现在却没执行 ....那只能说是有时候整型提升 有时候不提升
}// ~0 没提升 就是ff
    k=0xfe;
if (k!=~1) //那现在右边应该是fffe
{
i++;//(没执行)
}//~1 没提升 就是fe
    k=0x01;
if (k!=~0xfe) //那现在右边应该是ff01
......
-----------------------------------------------------------------------

KEIL C没有遵守标准C。

楼主换其他编译器试验。
比如,IAR,GCC,或者KEIL MDK FOR ARM(不是KEIL C51).
或者用VC,C++Builder试验。

只不过注意32位机int是32位。

一周热门 更多>