码迷,mamicode.com
首页 > 其他好文 > 详细

C Language Study - a=0 and a==0

时间:2015-04-09 15:39:05      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

关于a=0和a==0的解释:

如果:int a = 0;

那么a=0这个表达式是假,a==0这个表达式为真。

如果:int a = 1;

那么a=0这个表达式是假,a==0这个表达式为假。

举个例子:

    int a = 0;
    if( a = 0 )
        printf( "True" );
    else
        printf( "False" );
输出:False.

<span style="font-size:18px;">   </span><span style="font-size:10px;">int a = 0;
    if( a == 0 )
        printf( "True" );
    else
        printf( "False" );</span>
输出:True.

    int a = 1;
    if( a == 0 )
        printf( "True" );
    else
        printf( "False" );
输出:False

    int a = 0;
    if( a = 1 )
        printf( "True" );
    else
        printf( "False" );
输出:True

结合C语言优先级以及结合性来看一个例子:

int main()
{
    int a,b,c;
    a=b=c=0;
    (1>0?a==0:0>1)?b++:c++;
    printf( "%d%d%d\n", a, b, c );
    return 0;
}
输出结果是:010.

int main()
{
    int a,b,c;
    a=b=c=0;
    (1>0?a=0:0>1)?b++:c++;
    printf( "%d%d%d\n", a, b, c );
    return 0;
}
输出结果则是:001

int main()
{
    int a,b,c;
    a=b=c=0;
    1>0?a++:(0>1?b++:c++);
    printf( "%d%d%d\n", a, b, c );
    return 0;
}
输出结果是:100.很奇怪的是b和c的值都没有改变。在C语言中,条件表达式?:的结合性是右结合的(就是从右往左结合)。也就是说跟下面这个程序一样:

int main()
{
    int a,b,c;
    a=b=c=0;
    1>0?a++:0>1?b++:c++;
    printf( "%d%d%d\n", a, b, c );
    return 0;
}
去掉了括号。输出结果经过验证确实是一样的:100。

那么,这个括号()的优先级是比条件表达式的优先级高很多的。所以应该先计算(0>1?b++:c++)这个吧?不是吗?

如果是,那么0>1为假,则执行c++,所以c=1;

如果不是,那么先把后面那个括号(0>1?b++:c++)当做是前面?:语句的一个子项。那么就是先判断1>0为真,所以执行a++,a=1;答案输出100.正确!

到底是不是这样子的呢??我们再来验证:

int main()
{
    int a,b,c;
    a=b=c=0;
    0>1?a++:(0>1?b++:c++);
    printf( "%d%d%d\n", a, b, c );
    return 0;
}
输出结果是:001.分析一下,先判断0>1为假,所以执行(0>1?b++:c++),判断,0>1为假所以执行c++,c=1;输出001,所以验证了假说。

目前应该是这样的。

再看一个例子:

int main()
{
    int a,b,c;
    a=b=c=0;
    0>1?a++:0>1?b++:c++?1>0?b++:c++:a++;
    printf( "%d%d%d\n", a, b, c );
    return 0;
}

技术分享

输出结果是:101.

C Language Study - a=0 and a==0

标签:

原文地址:http://blog.csdn.net/oimchuan/article/details/44959135

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!